js es6 数组深层循环

let id = 5
const list = {
                id : 1,
                name: 'aa',
                sub: [
                    {
                        id : 2,
                        name: 'bb',
                        sub: [
                            {
                                id: 3,
                                name: 'cc',
                                sub: [
                                    {
                                        id: 4,
                                        name: 'dd'
                                    },
                                    {
                                        id: 5,
                                        name: 'ff'
                                    }
                                ]
                            }
                        ]
                    }
                ]
              }
  • 求 当外层id与list中某个id相等时,求name在所在层的的下标,即现在name的下标应该是 1
已解决 悬赏分:30 - 解决时间 2022-01-05 07:34
反对 0举报 0 收藏 0

回答2

最佳
  • @

    基础的树的遍历查找问题,即求符合要求节点在兄弟节点中的序号。

    function find(node, id, index=0) {
        // 找到节点了
        if(node.id === id) return index;
        
        // 子节点为空
        if(!Array.isArray(node.sub)) return null;
        
        // 遍历子树
        for(let i=0; i<node.sub.length; i++) {
            let result = find(node.sub[i], id, i);
            // 结果在子树中找到,返回结果
            if(result !== null) return result;
        }
        
        // 子树里也没有
        return null;
    }
    
    find(list, 5); // 1
    支持 0 反对 0 举报
    2022-01-04 08:23
  • @

    递归

    function find(arr, id) {
      let f = -1;
      function _find(item, index) {
        index++;
        if (item.id === id) {
          f = index;
        }
        if (item.sub) {
          for (let i = 0; i < item.sub.length; i++) {
            _find(item.sub[i], index);
          }
        }
      }
    
      _find(arr, 0);
      return f;
    }
    
    console.log(find(list, 5));// 4
    支持 0 反对 0 举报
    2022-01-04 09:03