js 不使用递归,将树转为扁平数组

	/**
	 * 将树转为扁平数组
	 * @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
	}

在开发中尽量避免使用递归的原因:

  1. 递归的性能问题:递归函数的每一次调用都需要压入函数栈,当递归深度过大时,会导致栈溢出,影响程序的性能。

  2. 递归的可读性问题:递归函数可能存在多次嵌套调用,导致代码可读性变差,难以理解和调试。

  3. 递归的内存问题:递归函数可能存在大量重复计算,导致内存占用过高,影响整个程序的性能。

  4. 递归的边界条件问题:递归函数必须定义边界条件,否则会出现无限递归的情况,导致程序崩溃。

因此,在开发过程中,为了保证程序的性能、可读性和稳定性,我们应该避免过度使用递归,并尽可能使用迭代等其他方式来实现相同的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值