js 树结构遍历 并显示每个数据的leve

怎么遍历能知道我 label:"666" 的leve 是 第2级
var arr = [

{
    label:"111"
},
{
    label:"222",
    children:[
        {
            label:"333"
        }
    ]
},
{
    label:"444",
    children:[
        {
            label:"555",
            children:[
                {
                    label:"666"
                }
            ]
        }
    ]
}

]

阅读 4.3k
5 个回答
// 结果 => 2
demo('666', [
  {
    label: "111"
  },
  {
    label: "222",
    children: [
      {
        label: "333"
      }
    ]
  },
  {
    label: "444",
    children: [
      {
        label: "555",
        children: [
          {
            label: "7777",
            children: [
              {
                label: "999"
              }
            ]
          },
          {
            label: "666"
          },
          {
            label: "8888"
          }
        ]
      }
    ]
  }
])

function demo(label, arr) {
  let temp, res = -1;
  (function doOneFloor(list, count) {
    if(Array.isArray(list)) {
      let item, a, len = list.length;
      for(a = 0; a < len; a++) {
        item = list[a]
        temp = 1
        if(item.label === label) {
          res = count
          break;
        } else {
          doOneFloor(item.children, count + temp)
        }
      }
    }
  })(arr, 0)
  console.log('哈哈', res)
  return res
}
interface DeepTreeNode {
    label: string
    children?: DeepTreeNode[]
}
const keyDeepRender = (tree: DeepTreeNode[]) => {
    const map = new Map<string, number>()
    const render = function render (tree: DeepTreeNode[], level = 0) {
        for (let i = 0; i < tree.length; i++) {
            const el = tree[i];
            map.set(el.label, level)
            el.children && render(el.children, level + 1)
        }
    }
    render(tree)
    return map
}

const map = keyDeepRender([
    {
        label:"111"
    },
    {
        label:"222",
        children:[
            {
                label:"333"
            }
        ]
    },
    {
        label:"444",
        children:[
            {
                label:"555",
                children:[
                    {
                        label:"666"
                    }
                ]
            }
        ]
    }
])
console.log(map.get('666'))
console.log(map)

clipboard.png

let ix = 0;
function repot(item, i) {
    ix++;
    item.map((x, ii) => {
        x.leve = ix;
        if (x.children) return repot(x.children, ii)
    })
    return;
}
arr.map((x, i) => {
    ix = 0;
    if (x.children) {
        repot(x.children, i);
    }
})
console.log(arr);

var ix = 0;
var arrs = [];
function ergodic(item,leve) {

for(var i in item){
    if(item[i].children){
        arrs.push({label:item[i].label,leve:leve})
        ergodic(item[i].children,leve+1);
    }else{
        arrs.push({label:item[i].label,leve:leve})
    }
}

}
ergodic(arr,ix)
console.log(arrs);

二叉树,最大广度,逐层遍历

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题