Заполнить массив результатов по значениям в дочерних елементах
Есть исходный массив данных на JS
const dataArr = [
{ kekv: 3000, dtZf: 0, dtSf: 0, ktZf: 0, ktSf: 0 },
{ kekv: 3100, dtZf: 0, dtSf: 0, ktZf: 0, ktSf: 0 },
{ kekv: 3110, dtZf: 0, dtSf: 0, ktZf: 0, ktSf: 0 },
{ kekv: 3120, dtZf: 0, dtSf: 0, ktZf: 0, ktSf: 0 },
{ kekv: 3130, dtZf: 0, dtSf: 0, ktZf: 0, ktSf: 0 },
{ kekv: 3111, dtZf: 30, dtSf: 60, ktZf: 0, ktSf: 70 },
{ kekv: 3112, dtZf: 80, dtSf: 50, ktZf: 40, ktSf: 0 },
{ kekv: 3121, dtZf: 90, dtSf: 20, ktZf: 30, ktSf: 20 },
{ kekv: 3122, dtZf: 10, dtSf: 10, ktZf: 10, ktSf: 50 },
{ kekv: 3131, dtZf: 20, dtSf: 20, ktZf: 20, ktSf: 10 }
]
Есть массив соотношений родительских и дочерних елементов, которые формируют массив данных
const kekvArr = [
{code: "3000", id: 30, parentID: null, treePatch: ['30']},
{code: "3100", id: 31, parentID: 30, treePatch: ['30','31']},
{code: "3110", id: 311, parentID: 31, treePatch: ['30','31', '311']},
{code: "3120", id: 312, parentID: 31, treePatch: ['30','31', '312']},
{code: "3130", id: 313, parentID: 31, treePatch: ['30','31', '312']},
{code: "3111", id: 3111, parentID: 311, treePatch: ['30','31', '311', '3111']},
{code: "3112", id: 3112, parentID: 311, treePatch: ['30','31', '311', '3112']},
{code: "3121", id: 3121, parentID: 312, treePatch: ['30','31', '312', '3121']},
{code: "3122", id: 3122, parentID: 312, treePatch: ['30','31', '312', '3122']},
{code: "3131", id: 3131, parentID: 313, treePatch: ['30','31', '313', '3131']}
]
Нужно в исходном массиве посчитать значения dtZf, dtSf, ktZf, ktSf всех родителей по их дочерним елементам.
Ответы (1 шт):
Автор решения: Alexey
→ Ссылка
Предлагаю такой вариант решения:
const code = kekvArr.map(i => i.code).reverse()
code.map(_code => {
const childData = dataArr.find(d => d.kekv == _code)
const parId = kekvArr.find(e => e.code == _code).parentID
if (parId != null) {
const parCode = kekvArr.find(c => c.id == parId).code
const parData = dataArr.find(d => d.kekv == parCode)
parData.dtZf += childData.dtZf
parData.dtSf += childData.dtSf
parData.ktZf += childData.ktZf
parData.ktSf += childData.ktSf
}
})
console.log(dataArr)
Может есть более универсальное и оптимальное решение ? Заранее благодарен!