如何制作具有有限值的对象数组
Posted
技术标签:
【中文标题】如何制作具有有限值的对象数组【英文标题】:How to make array of object with limmited values 【发布时间】:2022-01-01 05:27:09 【问题描述】:对不起,如果标题不清楚,请提前说明,但很难用语言来描述。
我有什么:
const obj =
a: 5,
b: 3,
c: 0,
d: 9
我想拥有什么:
const arr = [[a, 5] ,[b, 3]]
基本上,我尝试编写一个返回条目数组的函数,但它太符合要求:
当值等于 0 时不想要对象 值的总和必须小于 10第一点对我来说很容易,我可以做到
Object.entries(obj).filter(([k, v])=> v !== 0)
但我无法处理第二个。
我可以在这里使用reduce
吗?
【问题讨论】:
有点不清楚:如果总和大于 10 会发生什么? 为什么不[['d', 9]]
?
如果你有f: 4
怎么办——那也可能产生[["a", 5], ["f", 4]]
或[["b", 3], ["f", 4]]
?以及如何选择正确的输出?
另外, a: 5, b: 9, c: 0, d: 3
的预期输出是什么 - 它是 [["a", 5], ["d", 3]]
或 [["a", 5]]
?
如果你有e: 1
怎么办?它应该添加到结果集中吗?
【参考方案1】:
您可以使用closure 和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);
【讨论】:
【参考方案2】:@jabaa's answer 很棒,你应该接受它。
为了确认你的直觉,你可以使用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)
【讨论】:
确实,绝对!以上是关于如何制作具有有限值的对象数组的主要内容,如果未能解决你的问题,请参考以下文章