#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);