1. 程式人生 > 其它 >用遞迴函式實現樹形結構轉化為列表資料

用遞迴函式實現樹形結構轉化為列表資料

題目:  將下面的樹結構的資料轉化為列表的資料。 [ { "name": "北京市", "code": "11", "children": [ { "name": "市轄區", "code": "1101", "children": [ { "name": "東城區", "code": "110101", "children": [] } ] } ] }, { "name": "天津市", "code": "12", "children": [ { "name": "市轄區", "code": "1201", "children": [ { "name": "河北區", "code": "120105", "children": [] } ] } ] }, ]

轉化格式:

[ { "name": "北京市", "code": "11", }, { "name": "市轄區", "code": "1101", }, { "name": "東城區", "code": "110101", }, { "name": "天津市", "code": "12", }, { "name": "市轄區", "code": "1201", }, { "name": "河北區", "code": "120105", } ]

測試資料: 

var testData =  [ { "name": "北京市", "code": "11", "children": [ { "name": "市轄區", "code": "1101", "children": [ { "name": "東城區", "code": "110101", "children": [] } ] } ] }, { "name": "天津市", "code": "12", "children": [ { "name": "市轄區", "code": "1201", "children": [ { "name": "河北區", "code": "120105", "children": [] } ] } ] }, ]

方法:

getListData = (data) => {
let list = [];
data.map((item) => {
// 判斷當前item中是否有children
if (item.children) {
// push新增到list ...擴充套件運算子用於取出引數物件中的所有可遍歷屬性,拷貝到當前物件之中
// getListData函式,利用了遞迴,因為我們不知道有多少個children,判斷當前陣列中物件是否裡面有children,有的話繼續迭代,直到有沒children了,return會返回陣列,再用擴充套件運算子連線起來,再用push新增
list.push(...getListData(item.children));
// delete 排除item.children
delete item.children;
}
list.push(item);
})
return list;
}
getListData(testData)