今天碰到一个题,将下列的对象数组转换成树形结构
let data = [ {
id: 2,
value: 'b',
parent_id: 0
},
{
id: 1,
value: 'a',
parent_id: 0
}, {
id: 3,
value: 'c',
parent_id: 1
}, {
id: 4,
value: 'c',
parent_id: 1
}, {
id: 5,
value: 'd',
parent_id: 2
}, {
id: 6,
value: 'e',
parent_id: 2
}, {
id: 7,
value: 'f',
parent_id: 3
}, ];
变成树形结构类似这样,
[
{
"id":1,
"name":"a",
"parent_id":0,
"children":
[
...
]
}
]
// 第一种解决方法
let result = data.reduce((prev,item)=>{
prev[item.parent_id] ? prev[item.parent_id].push(item) : prev[item.parent_id] = [item];
return prev;
},{})
for(let prop in result){
result[prop].forEach(element => {
result[element.id] ? element.children = result[element.id]: '';
});
}
return result[0];
//第二种解法
// 第二种解法
data.map(item=>{
if(item.parent_id != 0){
data.map(o=>{
if(item.parent_id == o.id){
if(!o.children){
o.children = []
};
o.children.push(item)
}
})
}
})
return data.filter(item=>{
return item.parent_id ==0
})
网友评论