Мне нужно пересобрать массив и сложить все одинаковые элементы
У меня есть массив внутри объекты. В каждом объекте есть поле name and qty. Мне нужно пересобрать, чтобы если у элементов одинаковые name их qty складывается. Прикреплялю ссылку на sandbox.
Изначальный массив:
const products = [
{
name: "Album DVD",
qty: 1
},
{
name: "Album CD",
qty: 5
},
{
name: "PhotoBook",
qty: 2
},
{
name: "Album DVD",
qty: 3
},
{
name: "Album CD",
qty: 2
},
{
name: "PhotoCard",
qty: 1
}
]
Пример массива, который хочу получить:
const products = [
{
name: "Album DVD",
qty: 4
},
{
name: "Album CD",
qty: 7
},
{
name: "PhotoBook",
qty: 2
},
{
name: "PhotoCard",
qty: 1
}
]
https://codesandbox.io/s/awesome-kalam-tthu3?file=/src/App.js
Буду благодарен!
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Можно использовать временную структуру-объект, собрать в ней суммы, а потом опять преобразовать в массив объектов:
const products1 = [
{
name: "Album DVD",
qty: 1
},
{
name: "Album CD",
qty: 5
},
{
name: "PhotoBook",
qty: 2
},
{
name: "Album DVD",
qty: 3
},
{
name: "Album CD",
qty: 2
},
{
name: "PhotoCard",
qty: 1
}
];
const temp = products1.reduce(
(acc, { name, qty }) => {
acc[name] = (acc[name] ?? 0) + qty;
return acc;
},
{},
);
const products2 = Object.entries(temp).map(([name, qty]) => ({ name, qty }));
console.log(products2);