JavaScript 递归解决多层级数组和数组扁平化

递归解决多级数组

  1. 我们考虑利用递归 就必须等有一个判断条件 中断 递归 不然容易出现死循环
  2. 我们在进如函数递归是 要注意第二次调用自身是 函数的参数要是数据的子数据

我们在进如函数递归是 要注意第二次调用自身是 函数的参数要是数据的子数据

let arr = [
	{ name: '小明同学', children: [ { name: '小明同学', children: [ { name: '小明同学' } ] } ] }
]

function fn (arr, newArr = []) {
	arr.forEach(item => {
		typeof item === 'object' && item.name && newArr.push(item.name)  // 先判断当前项是否是对象。 当前项是否存在你想要的数据。都符合,把数据push到新数组里
		item.children && item.children instanceof Array && fn(item.children, newArr) // 当前项是否还有子节点,子节是否是数组, 如果是继续调用自己。再循环遍历一次.
	})
	return newArr
}

fn(arr) // ['小明同学','小明同学','小明同学']

function fn1 (arr, newArr = []) {
	function recursion (arr) {
		arr.forEach(item => { 
			newArr.push(item.name)
			item.children && recursion(item.children)
		})
	}
	return newArr
}

fn1(arr) // ['小明同学','小明同学','小明同学']
数组扁平化处理
	var arr = [ { name: 1 }, { name: 2, children: [ { name: 3 } ] } ]
	
	function flatten(arr) {
		return [].concat( ...arr.map( item => item.children ? [].concat(item, ...flatten(item.children)) : [].concat(item) ))
	}
	// [{ name:1 }, { name: 2, children: [ { name: 3 } ] }, { name:3 }]

枪在手,跟我走。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值