在对象数组中添加具有相同名称的产品记录的价格

时间:2016-04-12 08:15:36

标签: javascript arrays node.js logic javascript-objects

好吧,我需要添加同名产品的价格并相应修改数组。

输入:records=[{'name':'A', 'price':200},{'name':'B', 'price':350},{'name':'A', 'price':150},{'name':'B', 'price':300}]

输出:records=[{'name':'A', 'price':350},{'name':'B', 'price':650}]

如果使用javascript forEach函数提供解决方案,将会很高兴。

2 个答案:

答案 0 :(得分:1)

您可以使用所需对象构建一个新数组,并使用此对象的引用将价格添加到分组项目中。

var records = [{ 'name': 'A', 'price': 200 }, { 'name': 'B', 'price': 350 }, { 'name': 'A', 'price': 150 }, { 'name': 'B', 'price': 300 }],
    result = [];

records.forEach(function (a) {
    if (!this[a.name]) {
        this[a.name] = { name: a.name, price: 0 };
        result.push(this[a.name]);
    }
    this[a.name].price += a.price;
}, {});

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

答案 1 :(得分:0)

另一种方法

records.map(function(element, index, array){
    return {
        name: element.name, 
        price: (array
            .reduceRight(function(previousvalue, currentvalue, currentindex){
                var dup = currentvalue.name === element.name;
                var cp = dup? currentvalue.price: 0;
                dup? array.splice(currentindex, 1):0;
                return previousvalue + cp;
            }, 0))}
}).filter(function(element){ return typeof element !== "undefined";});

小提琴 https://jsfiddle.net/sfy2p1rf/1/