Найти одинаковые объекты в массиве
Есть массив вот такого формата
const listTest = [
{name: 'Шоколадный торт', id: 'd1jkl2345dfg67mn', price: 4.99, count: 1},
{name: 'Тирамису', id: 'd2dfg234njkl78mn', price: 3.99, count: 1},
{name: 'Чизкейк', id: 'd3gh56dfg23jkl8qw', price: 4.99, count: 1},
{name: 'Тирамису', id: 'd2dfg234njkl78mn', price: 3.99, count: 1},
{name: 'Тирамису', id: 'd2dfg234njkl78mn', price: 3.99, count: 1},
{name: 'Клубничный пирог', id: 'd4bnm2345dfg67kj1', price: 3.99, count: 1},
{name: 'Фруктовый салат', id: 'd5dfg23kl56dfg78nm2', price: 3.99, count: 1},
{name: 'Шоколадный торт', id: 'd1jkl2345dfg67mn', price: 4.99, count: 1},
{name: 'Шоколадный торт', id: 'd1jkl2345dfg67mn', price: 4.99, count: 1}
]
Нужно те значения, которые повторяются, удалить и оставить только одно и в нём изменить значение count должно быть равно сумме всех повторяющихся массивов.
Т.е должно получится:
const newList = [
{name: 'Шоколадный торт', id: 'd1jkl2345dfg67mn', price: 4.99, count: 3},
{name: 'Тирамису', id: 'd2dfg234njkl78mn', price: 3.99, count: 3},
{name: 'Чизкейк', id: 'd3gh56dfg23jkl8qw', price: 4.99, count: 1},
{name: 'Клубничный пирог', id: 'd4bnm2345dfg67kj1', price: 3.99, count: 1},
{name: 'Фруктовый салат', id: 'd5dfg23kl56dfg78nm2', price: 3.99, count: 1},
]
Ответы (1 шт):
Автор решения: Александр Окостень
→ Ссылка
Код представил на JS:
const listTest = [
{name: 'Шоколадный торт', id: 'd1jkl2345dfg67mn', price: 4.99, count: 1},
{name: 'Тирамису', id: 'd2dfg234njkl78mn', price: 3.99, count: 1},
{name: 'Чизкейк', id: 'd3gh56dfg23jkl8qw', price: 4.99, count: 1},
{name: 'Тирамису', id: 'd2dfg234njkl78mn', price: 3.99, count: 1},
{name: 'Тирамису', id: 'd2dfg234njkl78mn', price: 3.99, count: 1},
{name: 'Клубничный пирог', id: 'd4bnm2345dfg67kj1', price: 3.99, count: 1},
{name: 'Фруктовый салат', id: 'd5dfg23kl56dfg78nm2', price: 3.99, count: 1},
{name: 'Шоколадный торт', id: 'd1jkl2345dfg67mn', price: 4.99, count: 1},
{name: 'Шоколадный торт', id: 'd1jkl2345dfg67mn', price: 4.99, count: 1}
];
const groupedItems = listTest.reduce((acc, item) => {
const existingItem = acc.find(i => i.id === item.id);
if (existingItem) {
existingItem.count += item.count;
} else {
acc.push(item);
}
return acc;
}, []);
console.log(groupedItems);