У меня есть макет 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
}
]
Условие, на основе которого нам нужно внести изменения выглядит следующим образом: если соответствует определенному идентификатору, если у нас есть 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);