Вы можете использовать вложенные forEach
.Конечная цель - создать объект-накопитель со всеми Product
в качестве ключа и значениями, которые вам нужны в выходном массиве в качестве его значения.Создайте defaultObj
со всеми днями недели в качестве ключей и 0
в качестве значения.В цикле вложенных массивов деструктурирует , чтобы получить Product
и rest клавиш days
в качестве отдельного объекта.Переберите клавиши days
и обновите соответствующие значения Product
const arr = [[{Product:"Men's Cut and Sewn",Monday:13,Tuesday:1.29,Thursday:10,Friday:2,Saturday:2.1,Sunday:12},{Product:"Men's Inner",Monday:10,Tuesday:1.29,"Wednesday":2.6,Thursday:4.9,Friday:2,Saturday:20,Sunday:12}],[{Product:"Men's Cut and Sewn",Monday:10,Tuesday:45,Wednesday:45,Thursday:23,Friday:2,Saturday:3,Sunday:2},{Product:"Men's Inner",Monday:1,Tuesday:1,Thursday:34,Friday:5,Saturday:34,Sunday:34}]],
defaultObj = { Monday: 0, Tuesday: 0, Wednesday: 0, Thursday: 0, Friday: 0, Saturday: 0, Sunday: 0 },
group = { };
arr.forEach(inner => {
inner.forEach(({ Product, ...days }) => {
group[Product] = group[Product] || { Product, ...defaultObj };
for (const key in days)
group[Product][key] += days[key];
})
})
console.log(Object.values(group))
Вот как будет выглядеть group
объект
{
"Men's Cut and Sewn": {
"Product": "Men's Cut and Sewn",
"Monday": 23,
"Tuesday": 46.29,
"Wednesday": 45,
"Thursday": 33,
"Friday": 4,
"Saturday": 5.1,
"Sunday": 14
},
"Men's Inner": {
"Product": "Men's Inner",
"Monday": 11,
"Tuesday": 2.29,
"Wednesday": 2.6,
"Thursday": 38.9,
"Friday": 7,
"Saturday": 54,
"Sunday": 46
}
}
Вы можете использовать Object.values()
, чтобы получитьзначения этого объекта в виде массива
Приведенный выше код добавит значение для всех дней недели.Допустим, Men's Cut and Sewn
product не имеет значения для Monday
ни в одном из массивов, и вам не нужен ключ Monday
с 0 в качестве значения в выходных данных.Вместо использования defaultObj
вы можете добавить еще if-else
, чтобы проверить, был ли уже добавлен день.
const arr = [[{Product:"Men's Cut and Sewn",Monday:13,Tuesday:1.29,Thursday:10,Friday:2,Saturday:2.1,Sunday:12},{Product:"Men's Inner",Monday:10,Tuesday:1.29,"Wednesday":2.6,Thursday:4.9,Friday:2,Saturday:20,Sunday:12}],[{Product:"Men's Cut and Sewn",Monday:10,Tuesday:45,Wednesday:45,Thursday:23,Friday:2,Saturday:3,Sunday:2},{Product:"Men's Inner",Monday:1,Tuesday:1,Thursday:34,Friday:5,Saturday:34,Sunday:34}]],
group = { };
arr.forEach(inner => {
inner.forEach(({ Product, ...days }) => {
group[Product] = group[Product] || { Product };
for (const key in days) {
if(group[Product][key])
group[Product][key] += days[key];
else
group[Product][key] = days[key];
}
})
})
console.log(Object.values(group))