Объединить массивы в один - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь объединить массивы в один в javascript.

У меня есть этот массив:

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

И мне нужно это:

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

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Это может быть приближено к решению, в зависимости от данных:

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'));
0 голосов
/ 02 июля 2019

Проблема может быть решена с помощью уменьшения.

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]}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...