美文网首页
数组内相互关联的对象转化为树形结构

数组内相互关联的对象转化为树形结构

作者: 小强不是蟑螂啊 | 来源:发表于2019-04-15 11:56 被阅读0次
今天碰到一个题,将下列的对象数组转换成树形结构
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
})

相关文章

网友评论

      本文标题:数组内相互关联的对象转化为树形结构

      本文链接:https://www.haomeiwen.com/subject/lrtuwqtx.html