Я пытаюсь преобразовать список в древовидную структуру для Primeng TreeTable.
[{pk:"1", corpID:"1234", date: "31/03/21", rela:"4325", price:"20.00"},
{pk:"2", corpID:"1234", date: "21/03/21", rela:"4425", price:"50.00"} ,
{pk:"3", corpID:"3456", date: "03/03/21", rela:"6327", price:"80.00"} ,
{pk:"4", corpID:"4567", date: "05/03/21", rela:"7328", price:"40.00"}]
Мне нужно сгруппировать данные дважды, сначала по corpId
, а затем по rela
. PrimeNG TreeTable использует data
и children
- данные будут значением, показанным в строке, а дочерние элементы будут данными в развернутой строке. https://www.primefaces.org/primeng/showcase/#/treetable Структура должна быть:
{ data : [
{
data: {
corpID : "1234"
},
children: [
{
data:{
RELA: "4325"
},
children: [
{
data : { pk:"1",
corpID:"1234",
date: "31/03/21",
rela:"4325",
price:"20.00"},
}]
},
data:{
RELA: "4425"
},
children: [
{
{ pk:"2",
corpID:"2345",
date: "21/03/21",
rela:"4425",
price:"50.00"
}
]
...
Я пробовал группировать и использовать функцию сокращения, хотя она создала правильную древовидную структуру, но сжала данные. Есть ли способ построить древовидную структуру, включив в нее атрибуты data
и children
? Любая помощь будет принята с благодарностью! Функция, которую я попробовал ниже, уменьшила данные, и я не знал, как добавить в data
и children
let result = this.data.reduce(this.totree, {});
totree(branches, node) {
if (!branches[node.corpId]) {
branches[node.corpId] = {};
}
branches[node.corpId][node.rela] = node;
branches[node.corpId][node.rela] = Object.assign(branches[node.corpId][node.rela]);
return branches;
}