/**
* 将树转为扁平数组
* @param {*} tree 需要转换的树
*/
const treeToArr = tree => {
let resArr = [] //存储拆解完毕的node
let nodeArr = [...tree] //存储待拆解的node
while (nodeArr.length > 0) {
let tempNodeArr = [] //临时存储待拆解的node
nodeArr.forEach(item => {
let childArr = item.children || []
if (childArr.length > 0) {
//存在子节点
tempNodeArr.push(...childArr)
delete item.children
resArr.push({ ...item })
} else {
//无子节点
resArr.push({ ...item })
}
})
nodeArr = [...tempNodeArr]
}
return resArr
}
在开发中尽量避免使用递归的原因:
-
递归的性能问题:递归函数的每一次调用都需要压入函数栈,当递归深度过大时,会导致栈溢出,影响程序的性能。
-
递归的可读性问题:递归函数可能存在多次嵌套调用,导致代码可读性变差,难以理解和调试。
-
递归的内存问题:递归函数可能存在大量重复计算,导致内存占用过高,影响整个程序的性能。
-
递归的边界条件问题:递归函数必须定义边界条件,否则会出现无限递归的情况,导致程序崩溃。
因此,在开发过程中,为了保证程序的性能、可读性和稳定性,我们应该避免过度使用递归,并尽可能使用迭代等其他方式来实现相同的功能。