Javascript 按属性合并对象,在节点中累积另一个属性
获取以下对象数组并按键组合它们并累积价格的最佳方法是什么,以便Javascript 按属性合并对象,在节点中累积另一个属性,javascript,arrays,ecmascript-6,javascript-objects,Javascript,Arrays,Ecmascript 6,Javascript Objects,获取以下对象数组并按键组合它们并累积价格的最佳方法是什么,以便 var sales = [ { order_id: 138, price: 25, }, { order_id: 138, price: 30, }, { order_id: 139, price: 15, }, { order_id: 131, price: 25, }, ]) 变成这样: var sales = [ { order_id:
var sales = [
{
order_id: 138,
price: 25,
},
{
order_id: 138,
price: 30,
},
{
order_id: 139,
price: 15,
},
{
order_id: 131,
price: 25,
},
])
变成这样:
var sales = [
{
order_id: 138,
price: 55,
},
{
order_id: 139,
price: 15,
},
{
order_id: 131,
price: 25,
},
];
请注意,初始数组将包含500多个项。这是reduce的一个好用例吗?或者我需要用for循环构建一个全新的数组吗?您想要的格式和非起始格式都无效-您有一个具有多个键的对象。这应该是一个数组吗?我想你应该映射/减少(这应该是谷歌搜索的一个好关键字);)但正如大家所说,这里没有阵列!这没有任何意义<代码>项目键重复。对象不能有重复的键。抱歉,我混淆了我的语法。我想我现在已经编辑好了。这个问题现在更有意义了吗?可能是重复的谢谢最后,我对.reduce()和.findIndex()做了类似的事情-不确定哪一个性能更好。
var sales = [
{
order_id: 138,
price: 25,
},
{
order_id: 138,
price: 30,
},
{
order_id: 139,
price: 15,
},
{
order_id: 131,
price: 25,
},
];
var buf = {}
sales.map(obj => {
if(buf[obj.order_id]) {
buf[obj.order_id].price += obj.price
} else {
buf[obj.order_id] = obj
}
})
var result = Object.values(buf)
console.log(result)