Я использую Mat-Tree, используя Angular Материал. У меня есть плоская строка JSON, например:
"Entity": [
{
"ID": 1,
"NAME": "Reports",
"PARENTID": "0",
"ISACTIVE": "Y",
"CREATIONDATE": "2020-03-31T15:08:11",
"UPDATIONDATE": "2020-03-31T15:08:11",
"CREATEDBY": 596241,
"UPDATEDBY": 596241
},
{
"ID": 2,
"NAME": "TMS - Reports",
"PARENTID": 1,
"ISACTIVE": "Y",
"CREATIONDATE": "2020-03-31T15:08:38",
"UPDATIONDATE": "2020-03-31T15:08:38",
"CREATEDBY": 596241,
"UPDATEDBY": 596241
},
{
"ID": 3,
"NAME": "TMS - Beneficiary ",
"PARENTID": 2,
"ISACTIVE": "Y",
"CREATIONDATE": "2020-03-31T15:09:34",
"UPDATIONDATE": "2020-03-31T15:09:34",
"CREATEDBY": 596241,
"UPDATEDBY": 596241
}
]
, и мне нужно преобразовать ее в пары ключ-значение на основе идентификатора родителя. Что-то вроде:
{
Reports:
{
'Type 1 Reports': ['Beneficiary Reports', 'Some Other Report'],
'Type 2 Reports': null //No Children,
},
Some Other Menu Items: {
'My Parent Node': null,
'Some Other Menu Node': ['Child 1', 'Child 2']
}
}
Пока что я могу использовать этот код для преобразования его в иерархию «родитель-потомок», но он вытолкнул всех потомков в массив Items, который я не могу перебрать с помощью Mat-Tree. Мне нужно избавиться от предметов и получить что-то вроде пары ключ-значение, как я упомянул выше:
generateTreeData(menuResponse)
{
var map = {};
for(var i = 0; i < menuResponse.length; i++){
var obj = menuResponse[i];
var parent = '';
obj.items= [];
map[obj.ID] = obj;
if(obj.PARENTID == "0")
{
parent = '-';
}
else
{
parent = obj.PARENTID;
}
if(!map[parent]){
//Means Parent doesnt exist i.e. node Itself is parent node
map[parent] = {
items: []
};
}
map[parent].items.push(obj);
}
return map['-'].items;
}
Проблема:
Код ставит дочерние узлы в массиве Items. Мне нужно избавиться от массива Items и поместить его в пары ключ-значение, подобные той, что я упоминал выше. Как мне просто извлечь "ИМЯ" и элементы из этого массива JSON и создать пару ключ-значение? Что-то вроде того, что я упомянул выше?