多层嵌套如何取出某一健值?

[{
          id: 1,
          label: '一级 1',
          children: [{
            id: 4,
            label: '二级 1-1',
            children: [{
              id: 9,
              label: '三级 1-1-1'
            }, {
              id: 10,
              label: '三级 1-1-2'
            }]
          }]
        }, {
          id: 2,
          label: '一级 2',
          children: [{
            id: 5,
            label: '二级 2-1'
          }, {
            id: 6,
            label: '二级 2-2'
          }]
        }]

三级菜单 数据嵌套如何取出所有的id push到一个数组中

阅读 2.4k
3 个回答

--》 递归

// 源数据
var treeData = []
// id数组
var listId = []
function getIdListForTree (list, idList) {
    Array.isArray(list) && list.forEach((item) => {
        idList.push(item.id)
        getIdListForTree(item.children, idList)
    })
}
getIdListForTree(treeData, listId)
console.log(listId)
var data = [{
    id: 1,
    label: '一级 1',
    children: [{
        id: 4,
        label: '二级 1-1',
        children: [{
            id: 9,
            label: '三级 1-1-1'
        }, {
            id: 10,
            label: '三级 1-1-2'
        }]
    }]
}, {
    id: 2,
    label: '一级 2',
    children: [{
        id: 5,
        label: '二级 2-1'
    }, {
        id: 6,
        label: '二级 2-2'
    }]
}];

//递归方式排序
function eachTree1(data) {
    var arr = [], len = data.length;
    for (var i = 0; i < len; i++) {
        var item = data[i];
        var obj = { id: item.id, label: item.label };
        arr.push(obj);
        if (item.children) {
            var arrchild = arguments.callee(item.children);
            if (arrchild.length) {
                arr = arr.concat(arrchild);
            }
        }
    }
    return arr;
}

var arr1 = eachTree1(data);
console.log(arr1);

//相同层级排序
function eachTree2(data) {
    var arr = [], len = data.length;
    for (var i = 0; i < len; i++) {
        var item = data[i];
        var obj = { id: item.id, label: item.label };
        arr.push(obj);
    }
    for (var i = 0; i < len; i++) {
        var item = data[i];
        if (item.children) {
            var arrchild = arguments.callee(item.children);
            if (arrchild.length) {
                arr = arr.concat(arrchild);
            }
        }
    }
    return arr;
}

var arr2 = eachTree2(data);
console.log(arr2);
const ids = arr.reduce((total, cur) => {
  total.push(cur.id)
  if (cur.hasOwnProperty("children")) {
    total.push(...cur.children.reduce((a, b) => {
      a.push(b.id)
      if (b.hasOwnProperty("children")) {
        a.push(...b.children.reduce((x, y) => {
          x.push(y.id)
          return x
        }, []))
      }
      return a
    }, []))
  }
  return total;
}, [])
console.log(ids)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题