js es6 数组深层循环

小丑的帽子
  • 101
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
回复
阅读 1.7k
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

递归

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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏