如何制作具有有限值的 object 数组
How to make array of object with limmited values
抱歉,如果标题不清楚,但很难用语言描述。
我有:
const obj = {
a: 5,
b: 3,
c: 0,
d: 9
}
我想要的:
const arr = [[a, 5] ,[b, 3]]
基本上,我尝试编写一个函数来 return 我的条目数组,但它也满足要求:
- 不希望 objects 值 等于 0
- 值的总和必须小于 10
第一点对我来说很容易,我可以做到
Object.entries(obj).filter(([k, v])=> v !== 0)
但我无法处理第二个。
我可以在这里使用 reduce
吗?
您可以使用 closure and an IIFE 来存储总和
Object.entries(obj).filter((() => {
let sum = 0;
return ([k, v]) => { sum += v; return v !== 0 && sum < 10; };
})());
例子:
function convert(obj) {
return Object.entries(obj).filter((() => {
let sum = 0;
return ([k, v]) => { sum += v; return v !== 0 && sum < 10; };
})());
}
const obj = { a: 5, b: 3, c: 0, d: 9 };
const arr = convert(obj);
console.log(arr);
const obj2 = { a: 0, b: 0, c: 8, d: 0, e: 1, f: 5 };
const arr2 = convert(obj2);
console.log(arr2);
const obj3 = { a: 12 };
const arr3 = convert(obj3);
console.log(arr3);
很好,你应该接受。
为了证实您的直觉,您可以使用 reduce
,但它会变得相当复杂:
const obj = {
a: 5,
b: 3,
c: 0,
d: 9
}
const result = Object.entries(obj).reduce(
(o, newPair) => {
o.sum += newPair[1];
newPair[1] !== 0 && o.sum < 10 && o.pairs.push(newPair);
return o;
},
{
sum: 0,
pairs: []
}
).pairs;
console.log(result)
抱歉,如果标题不清楚,但很难用语言描述。
我有:
const obj = {
a: 5,
b: 3,
c: 0,
d: 9
}
我想要的:
const arr = [[a, 5] ,[b, 3]]
基本上,我尝试编写一个函数来 return 我的条目数组,但它也满足要求:
- 不希望 objects 值 等于 0
- 值的总和必须小于 10
第一点对我来说很容易,我可以做到
Object.entries(obj).filter(([k, v])=> v !== 0)
但我无法处理第二个。
我可以在这里使用 reduce
吗?
您可以使用 closure and an IIFE 来存储总和
Object.entries(obj).filter((() => {
let sum = 0;
return ([k, v]) => { sum += v; return v !== 0 && sum < 10; };
})());
例子:
function convert(obj) {
return Object.entries(obj).filter((() => {
let sum = 0;
return ([k, v]) => { sum += v; return v !== 0 && sum < 10; };
})());
}
const obj = { a: 5, b: 3, c: 0, d: 9 };
const arr = convert(obj);
console.log(arr);
const obj2 = { a: 0, b: 0, c: 8, d: 0, e: 1, f: 5 };
const arr2 = convert(obj2);
console.log(arr2);
const obj3 = { a: 12 };
const arr3 = convert(obj3);
console.log(arr3);
为了证实您的直觉,您可以使用 reduce
,但它会变得相当复杂:
const obj = {
a: 5,
b: 3,
c: 0,
d: 9
}
const result = Object.entries(obj).reduce(
(o, newPair) => {
o.sum += newPair[1];
newPair[1] !== 0 && o.sum < 10 && o.pairs.push(newPair);
return o;
},
{
sum: 0,
pairs: []
}
).pairs;
console.log(result)