如何通过将项目分组到数组来操作数组

时间:2018-03-13 09:27:01

标签: javascript

假设我有这个数组:

let obj = [ 
   { prop: 'a', val: 2 },
   { prop: 'a', val: 1 },
   { prop: 'b', val: 3 },
   { prop: 'b', val: 1 }
]

假设我想为每个现有的道具获得一个数组:

let myArr = [ 
   [ { prop: 'a', val: 2 }, { prop: 'a', val: 1 } ]
   [ { prop: 'b', val: 3 }, { prop: 'b', val: 1 } ]
]

如何通过使用高阶函数来实现?

2 个答案:

答案 0 :(得分:0)

function sumProps(arr) {
    const sum = arr.reduce((ac,cv) => {
        if (ac[cv] === undefined) ac[cv.prop] = ac[cv.prop] = cv.val;
        else ac[cv.prop] += cv.val;
    }, {});

    const res = [];
    for (const p in sum) {
        res.push({ prop:p, sum:sum[p] });
    }
    return res;
}

答案 1 :(得分:0)

您可以通过查找具有相同prop的对象来减少对象并更新值。

var array = [{ prop: 'a', val: 2 }, { prop: 'a', val: 1 }, { prop: 'b', val: 3 }, { prop: 'b', val: 1 }],
    result = array.reduce((r, o) => {
        var temp = r.find(({ prop }) => prop === o.prop);
        if (temp) {
            temp.val += o.val;
        } else {
            r.push(Object.assign({}, o));
        }
        return r
}, []);

console.log(result);