我有一个像下面这样的模拟JSON:
const apiData = [{
"id": 1,
"label": "List item 1",
"parent_id": 0
},
{
"id": 5,
"label": "List item 1",
"parent_id": 1
},
{
"id": 6,
"label": "List item 1",
"parent_id": 1
},
{
"id": 7,
"label": "List item 1",
"parent_id": 1
},
{
"id": 8,
"label": "List item 1",
"parent_id": 1
},
{
"id": 9,
"label": "List item 1",
"parent_id": 8
},
{
"id": 10,
"label": "List item 1",
"parent_id": 8
},
{
"id": 2,
"label": "List item 1",
"parent_id": 0
}
]
我需要将其转换为以下内容:
[{
"id": 1,
"label": "List item 1",
"parent_id": 0,
"children": [{
"id": 5,
"label": "List item 1",
"parent_id": 1
},
{
"id": 6,
"label": "List item 1",
"parent_id": 1
},
{
"id": 7,
"label": "List item 1",
"parent_id": 1
},
{
"id": 8,
"label": "List item 1",
"parent_id": 1,
"children": [{
"id": 9,
"label": "List item 1",
"parent_id": 8
},
{
"id": 10,
"label": "List item 1",
"parent_id": 8
}
]
}
]
},
{
"id": 2,
"label": "List item 1",
"parent_id": 0
}
]
需要进行更改的条件如下: 如果对应于特定的 id,如果我们有一个
parent_id
,那么我们需要在个别对象中添加一个属性 children
,并将值放置为匹配的 parent_id
对象的数组。我尝试编写了这个代码,并且已经非常接近。但是我无法继续前进。
请给予建议。
我的代码:
const apiData = [
{'id': 1, 'label': 'List item 1', 'parent_id' : 0 },
{'id': 5, 'label': 'List item 1', 'parent_id' : 1 },
{'id': 6, 'label': 'List item 1', 'parent_id' : 1 },
{'id': 7, 'label': 'List item 1', 'parent_id' : 1 },
{'id': 8, 'label': 'List item 1', 'parent_id' : 1},
{'id': 9, 'label': 'List item 1', 'parent_id' : 8 },
{'id': 10, 'label': 'List item 1', 'parent_id' : 8 },
{'id': 2, 'label': 'List item 1', 'parent_id' : 0 },
];
function compare(a, b) {
const idA = a.id;
const idB = b.id;
let comparison = 0;
comparison = idA > idB ? 1 : (idA < idB ? -1 : 0);
return comparison;
}
const sortedApiData = apiData.sort(compare);
const newSortedApiData = [...sortedApiData];
let a = [];
for(let i = 0; i < sortedApiData.length ; i++){
for(let j = 0 ; j < sortedApiData.length ; j++){
if(i === j){
continue;
}
else{
if(sortedApiData[i].id === sortedApiData[j].parent_id){
a.push(sortedApiData[j]);
}
}
}
}
console.log(a);