Как объединить массив объектов по ключу? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть этот объект:

[{
  "NOMOR_CB": "CB/20-0718",
  "ITEM": "ABC"
}, {
  "NOMOR_CB": "CB/20-0719",
  "ITEM": "A1"
}, {
  "NOMOR_CB": "CB/20-0719",
  "ITEM": "A2"
}]

Я бы объединил значения одного и того же NOMOR_CB, чтобы объединить значения одного и того же NOMOR_CB.Это желаемый вывод.

[{
  "NOMOR_CB": "CB/20-0718",
  "ITEM": "ABC"
}, {
  "NOMOR_CB": "CB/20-0719",
  "ITEM": "A1, A2"
}]

Как мне зациклить объект, чтобы получить желаемый вывод?

Мой токовый цикл (невозможно объединить значения):

var arr_test = "[";
$.each(response.arr_json, function(i, data) {
  arr_test += '{"NOMOR_CB":"'+ data.NOMOR_CB +'",';
  arr_test += '"ITEM":"'+ data.ITEM +'"},';
})

var test  = arr_test.replace(/,\s*$/, "");
test += "]";

document.write(test);

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете использовать .reduce() для суммирования вашего массива в объект. Используйте Object.entries для преобразования объекта в массив. Вы можете map сформировать нужный формат объекта.

let arr = [{"NOMOR_CB":"CB/20-0718","ITEM":"ABC"},{"NOMOR_CB":"CB/20-0719","ITEM":"A1"},{"NOMOR_CB":"CB/20-0719","ITEM":"A2"}];

let result = Object.entries(arr.reduce((c, {NOMOR_CB,ITEM}) => {
  c[NOMOR_CB] = c[NOMOR_CB] || [];
  c[NOMOR_CB].push(ITEM);
  return c;
}, {})).map(([i, a]) => Object.assign({}, {NOMOR_CB: i,ITEM: a.join(', ')}));

let str = JSON.stringify(result); //Optional. Based on your code, you are trying to make a string.

console.log(str);

И не объединяйте строки в json. Вы можете использовать JSON.stringify(result); для преобразования объекта js в строку.

Документ: .reduce () , .map ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...