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