Как суммировать массив JSON с объектами, которые разделяют строковое значение

#arrays #json #reduce

#массивы #json #уменьшить

Вопрос:

Я пытаюсь объединить похожие объекты 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:

Я только что выполнил один цикл и с массивом 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);