js 多层嵌套的数组,取出最后一层的数据?

需要获取到isCheck = true 的所有id的集合

list: [{
  id: '1',
  isCheck: false,
  children: [{
    id: '1-1',
    isCheck: false,
    children: null
  }, {
    id: '1-2',
    isCheck: true,
    children: null
  }]
}, {
  id: '2',
  isCheck: false,
  children: [{
    id: '2-1',
    isCheck: true,
    children: null
  }]
}, {
  id: '3',
  isCheck: true,
  children: null
}]

想到用递归算法,把数组扁平化降级,可是获取到的数据不对,希望获取到数据为

['1-2', '2-1', '3']
  steamroller: function (arr) {
    let newArr = []
    let flat = function (item) {
      for (var i = 0; i < item.length; i++) {
        if (Array.isArray(item[i].children)) {
          flat(item[i])
        } else {
          newArr.push(item[i])
        }
      }
    }
    flat(arr)
    return newArr
  }

求助求助!

阅读 14.5k
3 个回答
const result = [],
  getId = arr => {
    arr.forEach(v => {
        v.isCheck && result.push(v.id);
        if (v.children instanceof Array) {
            getId(v.children)
        }
    });
}
getId(list);
console.log(result) //["1-2", "2-1", "3"]

递归一下

function flattern(data) {
  return data.reduce((iter, val) => {
    if(val.isCheck) iter.push(val.id);
    return val.children ? [...iter, ...flattern(val.children)] : iter;
  }, []);
}

var result = flattern(data);
console.log(result);

你是想要获取到所有的 children 下面的 id?

function funEach(data){
    var arr = new Array();                //    准备空数组存放
    /*    第一层是索引数组 */
    for(var i = 0;i < data.length;i++){
        /*   该判断通过,说明下面具有值     */
       if(data[i]['children'][0] != undefined){
           var l = data[i]['children'][0];            //    准备个临时变量
           for(var iOne = 0;iOne < l.length;i++){
               arr[] = l['id'];
           }
       }
    }
    return arr;
}

嗯,按我逻辑来想的话应该是没问题的。

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