在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C++  HTML/ 怎樣用js遞歸無限向下獲取子節(jié)點數據,從而得到一個新的樹形數據?

怎樣用js遞歸無限向下獲取子節(jié)點數據,從而得到一個新的樹形數據?

現有數據:

var res = [{
    code: 1,
    name: "湖北省",
    children: [{
        code: 1,
        name: "武漢市",
        children: [{
            code: 1,
            name: "漢陽區(qū)",
            children: [{
                code: 1,
                name: "水上分局"
            }]
        }, {
            code: 1,
            name: "武昌區(qū)",
            children: [{
                code: 1,
                name: "水上分局"
            }]
        }, {
            code: 1,
            name: "漢口區(qū)",
            children: [{
                code: 1,
                name: "水上分局"
            }]
        }]
    }, {
        code: 1,
        name: "十堰市",
        children: [{
            code: 1,
            name: "鄖陽區(qū)",
            children: [{
                code: 1,
                name: "安陽鎮(zhèn)"
            }]
        }, {
            code: 1,
            name: "茅箭區(qū)",
            children: [{
                code: 1,
                name: "小川鄉(xiāng)"
            }]
        }]
    }]
}]

想遞歸得到下面格式的數據(就是過濾掉了部分不需要的字段):

var newData = [{
    name: '湖北省',
    children: [{
        name: '武漢市',
        children: [{
            name: '漢陽區(qū)',
            children: [{
                name: '水上分局'
            }]
            ...
        }]
    },{
        name: '十堰市',
        children: [{
            name: '鄖陽區(qū)',
            children: [{
                name: '安陽鎮(zhèn)'
            }]
            ...
        }]
    }]
}]

現在我只會用嵌套循環(huán)的方式來解決,如果想精簡代碼或者不知道具體有多少層的話,嵌套循環(huán)肯定是不行的,請問用遞歸的方法該怎么實現呢?

回答
編輯回答
款爺
必須反駁 “循環(huán)是不行的”
function s(){
    let n = res;
    let r = [...n];
    do{
        let N_r = [];
        for(let node of r){
            delete(node["code"]);
            if(node.children){
                N_r = N_r.concat(node.children);
            }
        }
        r = N_r;
    }while(r.length);
    return n; 
}
2018年5月30日 02:08
編輯回答
夢一場
function serverArray(arr){
  for(var item = 0;item < arr.length;item++){
    if(arr[item].children){
      delete arr[item].code
      serverArray(arr[item].children)
    }
  }
  return arr
}
console.log(serverArray(res))

是這個意思?

2018年5月21日 12:16