鍍金池/ 問答/Python  HTML/ js 多層嵌套的數(shù)組,取出最后一層的數(shù)據(jù)?

js 多層嵌套的數(shù)組,取出最后一層的數(shù)據(jù)?

需要獲取到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
}]

想到用遞歸算法,把數(shù)組扁平化降級,可是獲取到的數(shù)據(jù)不對,希望獲取到數(shù)據(jù)為

['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
  }

求助求助!

回答
編輯回答
久舊酒

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

function funEach(data){
    var arr = new Array();                //    準備空數(shù)組存放
    /*    第一層是索引數(shù)組 */
    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;
}

嗯,按我邏輯來想的話應(yīng)該是沒問題的。

2017年9月11日 13:13
編輯回答
孤酒
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"]

遞歸一下

2017年5月3日 18:42
編輯回答
糖豆豆
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);
2017年11月21日 19:49