Как суммировать массив JSON с объектами, имеющими строковое значение - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь объединить похожие объекты JS в массив на основе соответствующего строкового значения.

Начиная с чего-то вроде

let arr1 = [{
  str: "a",
  num: 10
}, {
  str: "a",
  num: 10
}, {
  str: "b",
  num: 5
}, {
  str: "b",
  num: 2
}, {
  str: "c",
  num: 4
}];

Удаление дублирующихся записей str и суммирование индексов

let arr2 = [{
  str: "a",
  num: 20
}, {
  str: "b",
  num: 7
}, {
  str: "c",
  num: 4
}];

Нужно ли разбивать arr1 на n массивы, суммировать и затем рекомбинировать, или есть более простой подход с map и reduce, который хорошо работает для вложенных свойств?

1 Ответ

3 голосов
/ 16 апреля 2019

Я только что сделал один цикл с массивом tmp.

let arr1 = [{
  str: "a",
  num: 10
}, {
  str: "a",
  num: 10
}, {
  str: "b",
  num: 5
}, {
  str: "b",
  num: 2
}, {
  str: "c",
  num: 4
}];

var tarr = [];
var arr2 = [];

arr1.forEach( x => {
    var i = tarr.indexOf(x.str);
    if(i > -1){
        arr2[i].num += x.num;
    } else {
        tarr.push(x.str);
        arr2.push(x);
    }
});

console.log(arr2);
...