方式一:数据的map和concat方法,结合...展开运算符递归实现(推荐)
function turnTreeIntoList(array) {
return [].concat(...array.map(item => [].concat(item, item.children ? turnTreeIntoList(item.children) : [])))
}
上面代码如果不好理解,可以展开:
function turnTreeIntoList(array) {
return [].concat(...(array.map(item => {
return [].concat([item], item.children ? turnTreeIntoList(item.children) : [])
})))
}
方式二:外部定义一个变量接收,使用forEach和concat递归实现
let newDataArr = [];
function turnTreeIntoList(array) {
array.forEach(item => {
newDataArr = newDataArr.concat([item])
if (item.children) {
turnTreeIntoList(item.children)
}
})
return newDataArr
}
理论千遍不然实操一遍。准备了个数组,试一试:
树形数组:
let list= [{
name: '第一项',
taxAmount: 12223,
noTaxAmount: 33,
warn: '超支',
children: [{
name: '第一项.1',
taxAmount: 123,
noTaxAmount: 454,
children: [{
name: '第一项.1.1',
taxAmount: 123,
noTaxAmount: 454
}]
}]
}, {
name: '第二项',
taxAmount: 115,
noTaxAmount: 452124,
warn: '结余',
children: [{
name: '第二项.1',
taxAmount: 123,
noTaxAmount: 454
}
]
}, {
name: '第三项',
taxAmount: 3,
noTaxAmount: 43354,
warn: '结余',
}]
使用上面两种方法可以得到以下数据结构: