4 回答

TA貢獻1809條經(jīng)驗 獲得超8個贊
下面一段程序供參考, 層級多深都能支持。
解釋下這里用for不用forEach的原因,for在當前循環(huán)判斷生效后,往arr添加后面添加子項,并會影響到下次循環(huán),而forEach則不然。本來for的這個特性是個缺陷,ES5 forEach的出現(xiàn)也是為了彌補這個缺陷,但是事無絕對,用得好就是優(yōu)勢。
for(let item of arr) {
if(item.children) {
arr = arr.concat(item.children);
delete item.children
}
}
console.log(arr);
如果要求保持順序, 下面代碼參考下
for(let i=0; i < arr.length ; i++) {
if(arr[i].children) {
arr = arr.slice(0,i+1).concat(arr[i].children,arr.slice(i+1))
delete arr[i].children
}
}
console.log(arr);
PS:能用循環(huán)解決的問題,就不要用遞歸,如果層次太深,內(nèi)存吃不消不說,還有可能調(diào)用棧溢出,程序崩潰。
由于題主是圖片, 測試代碼我也貼一下吧:
let arr = [
{
a:1,
b:2,
c:3,
children: [
{
id:1,
a: 1-1,
b: 1-2,
c: 1-3
},
{
id: 2,
a: 1-1,
b: 1-2,
c: 1-3,
children: [
{
id:3,
a: 1-1,
b: 1-2,
c: 1-3,
children: [
{
id: 4,
a: 1-1,
b: 1-2,
c: 1-3
}
]
}
]
}
]
},
{
a: 2-1,
b: 2-2,
children: []
}
]
添加回答
舉報