鍍金池/ 問答/人工智能  HTML/ 假設有這樣一段樹形數據,怎么根據當前id獲取到祖先節(jié)點的id?

假設有這樣一段樹形數據,怎么根據當前id獲取到祖先節(jié)點的id?

`let arr = [{
    id: 1,
    item: [{
      id: 3,
      item: []
    }, {
      id: 4,
      item: []
    }]
  },
  {
    id: 2,
    item: [{
      id: 5,
      item: []
    }, {
      id: 6,
      item: [{
        id: 7,
        item: []
      }]
    }]
  }
]

let thisId = 7`

我需要的是通過7找到父級6和爺爺級2,小白求指導
回答
編輯回答
賤人曾

簡單的深度優(yōu)先搜索即可

function findPath (node, id, path) {
    if (!path) { path = [] }
    if (node.id === id) { return path }
    path.push(node)
    if (node.item.some(child => findPath(child, id, path))) {
        return path
    }
    path.pop()
    return false
}

console.log(findPath({item: arr}, 7).map(x => x.id))
2017年6月10日 16:37
編輯回答
神曲
 var arr=[{
    id: 1,
    item: [{
        id: 3,
        item: []
    },
    {
        id: 4,
        item: []
    }]
},
{
    id: 2,
    item: [{
        id: 5,
        item: []
    },
    {
        id: 6,
        item: [{
            id: 7,
            item: []
        }]
    }]
}];

    function setSubNodeParentId(parentId,subs){
        for(var i in subs){
            subs[i].parentId=parentId;
            if(subs[i].item.length>0){
                setSubNodeParentId(subs[i].id,subs[i].item);
            }
            
        }
    
    }
    for(var i in arr){
        var pid=arr[i].id;
        var subs=arr[i].item;
        setSubNodeParentId(pid,subs);
        
    }
   
    console.log(JSON.stringify(arr));
   

結果

[{
    "id": 1,
    "item": [{
        "id": 3,
        "item": [],
        "parentId": 1
    },
    {
        "id": 4,
        "item": [],
        "parentId": 1
    }]
},
{
    "id": 2,
    "item": [{
        "id": 5,
        "item": [],
        "parentId": 2
    },
    {
        "id": 6,
        "item": [{
            "id": 7,
            "item": [],
            "parentId": 6
        }],
        "parentId": 2
    }]
}]
2018年8月28日 07:03
編輯回答
萌面人
arr.forEach((list,index)=>{
     if(list.id === thisId){
       console.log('list',list);
     }else if(list.item.length > 0){
       list.item.forEach((one,i)=>{
         if(one.id == thisId){
           console.log('one',one);
           console.log('list',list);
           return;
         }else if(one.item.length >0){
           one.item.forEach((part,y)=>{
             if(part.id == thisId){
               console.log('part.id自己',part.id);
               console.log('one.id父親',one.id);
               console.log('list.id爺爺',list.id);
               return;
             }
           })
         }
       })
     }
   })
2017年7月2日 15:58