var input = [{id: 1, price: 1200, profit:60, name:'Messi'},
{id: 2, price: 600, profit:40, name:'Ronaldo'},
{id: 1, price: 100, profit:40, name:'Messi'},
{id: 1, price: 200, profit:30, name:'Messi'},
{id: 2, price: 400, profit:10, name:'Ronaldo'},
{id: 1, price: 800, profit:10, name:'Messi'}];
预期输出:
[{id:1, name:'Messi', price:'2300', profit:'140'},
{id:2, name:'Ronaldo', price:'1000', profit:'50'},
]
尝试:
var output = { };
input.forEach(e => output[e.id] = (output[e.id] || 0) + e.price);
console.log(output);
如何使这里像预期的输出。
5条答案
按热度按时间q9yhzks01#
您可以使用
.reduce()
方法执行此操作uurv41yg2#
您可以将Array.prototype.reduce()与Nullish coalescing assignment (??=)结合使用
代码:
fkaflof63#
这里有两个关键问题。
1.您需要循环遍历对象数组。
JavaScript提供了几种循环数组的机制,你可以使用传统的for语句,或者for/of语句,或者
reduce
,就像前面提到的那样。1.您需要能够按对象中提供的名称对信息进行分组。
Objects are very useful,因为它们允许您进行关联(请阅读:"group")具有唯一键的值。
因此,一般程序是:
1.初始化一个用于存储键(名称)和值(更多对象)的对象
1.循环遍历输入数组,从对象中获取名称,检查它是否作为键存在于对象中,如果不存在,则将其添加为键,然后在迭代中分配初始对象作为其值。
1.根据需要更新该对象的值
1.好了,现在你有了一个对象的对象,你想要的是一个对象数组,类似于你的输入,使用
Object.values
返回一个对象值数组(嵌套对象)。注意:在你的问题中,你需要的输出是字符串形式的
price
和profit
,而不是数字形式的,所以你可能需要对Object.values
中的数组执行额外的mapping
操作才能得到这个结果。我在示例的结尾包含了这些代码,并提供了一些链接,指向其他提到的代码的文档。)在这个例子中,我将使用一个
for/of
循环。补充资料
nbnkbykc4#
除了计算
price
之外,你还可以计算profit
,并将id
和name
相加,每个id的结果是一个对象而不是一个数字,然后使用Object.values()
来得到最终结果,正如在其他地方所演示的,Array#reduce
也可以用来给予中间结果。wkyowqbh5#
给予这个:)