Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按属性合并对象,在节点中累积另一个属性_Javascript_Arrays_Ecmascript 6_Javascript Objects - Fatal编程技术网

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)