@VelkinVV

Как найти одинаковые объекты в массиве и сложить их данные?

Помогите решить задачу.
Есть массив с неопределённым количеством массивов, в которых находится неопределённое количество объектов с одинаковыми полями.
Для примера
let arr = [
	[
		{ name: 'Apple',  total: '5', id: '1'},
		{ name: 'Banana', total: '11', id: '22'},
	],
	[
		{ name: 'Apple',  total: '1', id: '1'},
		{ name: 'Banana', total: '15', id: '22'},
	],
	[
		{ name: 'Apple',  total: '5', id: '1'},
		{ name: 'Banana', total: '10', id: '22'},
	],
]


Задача, найти все совпадения по id, сложить total в совпадающих значениях и записать это в один массив вида

result = [
		{ name: 'Apple',  total: '11', id: '1',},
		{ name: 'Banana', total: '36', id: '22',}
	],
  • Вопрос задан
  • 237 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Вот корявенькое решение, без проверок на наличие полей, как улучшить думайте сами
let arr = [
  [
    { name: 'Apple',  total: '5', id: '1'},
    { name: 'Banana', total: '11', id: '22'},
  ],
  [
    { name: 'Apple',  total: '1', id: '1'},
    { name: 'Banana', total: '15', id: '22'},
  ],
  [
    { name: 'Apple',  total: '5', id: '1'},
    { name: 'Banana', total: '10', id: '22'},
  ],
]

let result = Object.values(arr.flat().reduce((acc, item)=>{
    if(!acc[item.name]){
        acc[item.name] = {...item};
    }else{
        acc[item.name].total = `${+acc[item.name].total + +item.total}`;
    }
    return acc;
},{}));

console.log(result)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы