Каждый родительский элемент должен содержать общее количество всех подкатегорий.Будет очень хорошо, если решение будет использовать только методы объекта Array и не использовать циклы while
.
Это пример базовой структуры:
const base = [
{ id: 1, count: 2, parentId: null },
{ id: 2, count: 4, parentId: 1 },
{ id: 3, count: 0, parentId: 2 },
{ id: 6, count: 8, parentId: 3 },
{ id: 7, count: 8, parentId: 3 },
{ id: 8, count: 2, parentId: 7 },
{ id: 4, count: 2, parentId: null },
{ id: 5, count: 1, parentId: 4 },
];
Вот как это должно выглядеть:
const expected = [
{ id: 1, count: 2, total: 24, parentId: null },
{ id: 2, count: 4, total: 22, parentId: 1 },
{ id: 3, count: 0, total: 18, parentId: 2 },
{ id: 6, count: 8, total: 8, parentId: 3 },
{ id: 7, count: 8, total: 10, parentId: 3 },
{ id: 8, count: 2, total: 2, parentId: 7 },
{ id: 4, count: 2, total: 3, parentId: null },
{ id: 5, count: 1, total: 1, parentId: 4 },
];
Вот мой текущий код.Я думаю, что здесь как-то мне нужно перейти на последний уровень, а затем начать с последнего элемента до верхнего уровня конкатенации с текущим уровнем count
значения проп, поэтому я сделал имя IIFE.
let c = a.map(cat => {
const top = a.filter(v => cat.id === v.parentId);
let test;
return ({
...cat,
total: (test = categs => {
return categs.reduce((acc, val) => {
/* ??? */
return acc + val.count
}, cat.count);
})(top)
})
})