将数组合并为一个

时间:2019-07-02 16:35:35

标签: javascript angular

我正在尝试在javascript中将数组合并为一个。

我有这个数组:

  

[{ID:111,SEG:4},{ID:111,SEG:   3}]

我需要这个:

  

[{ID:111,SEG:[3,4]}]

2 个答案:

答案 0 :(得分:0)

可以使用reduce来解决问题。

let dataJ = [{ID: 111, SEG: 4}, {ID: 111, SEG: 3}]
let newData = dataJ.reduce(function(acc, curr) {
    let index = acc.findIndex(item => item.ID === curr.ID);
    if (index === -1) {
        acc.push(curr);
    } else {
        if (!acc[index].SEG || !Array.isArray(acc[index].SEG)) {
            acc[index].SEG = [];
        }
        acc[index].SEG.push(curr.SEG);
    }
    return acc;
}, []);
console.log(newData); // [{ID: 111, SEG: [3, 4]}]

答案 1 :(得分:0)

这可以近似为解决方案,具体取决于数据:

var items = [
    {
        id: 1,
        value: 5
    },
    {
        id: 1,
        value: 3
    },
    {
        id: 2,
        value: 40
    },
    {
        id: 2,
        value: 35
    }
];

var group = function (arr, groupBy) {
    var values = {};
    arr.forEach(function (element) {
        var item = element;
        var index = item[groupBy];
        if (!values[index]) {
            values[index] = item;
        }
        else {
            item.value += values[index].value;
        }
        values[index] = item;
    });
    return Object.keys(values).map(function (k) { return values[k]; });
};

console.log(group(items, 'id'));