Слияние объектов по свойству, накопление другого свойства в узле - PullRequest
0 голосов
/ 30 апреля 2018

Как лучше всего взять следующий массив объектов и объединить их по ключу и накапливать цену так, чтобы это:

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 элементов. Это хороший вариант для снижения? или мне нужно построить новый массив с циклом for?

1 Ответ

0 голосов
/ 30 апреля 2018
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)
...