手写数组flatern数组拍平,考虑多层级

知识先填坑:

concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组, 而仅仅会返回被连接数组的一个副本返回一个新的数组。
该数组是通过把所有 arrayX 参数添加到 arrayObject 中生成的。 如果要进行 concat() 操作的参数是数组, 那么添加的是数组中的元素, 而不是数组。

如:

const res= [].concat(1, 2, [3, 4], 5)
console.log(res) //[1, 2, 3, 4, 5] 只有一层数组,完成数组拍平
const res2 = [].concat(1, 2, [3, [4]], 5)
console.log(res2) //[1, 2, 3, [4], 5] 超过一层数组,只能拍平一层数组

结论:concat()方法可以拍平数组,但只能拍平一层数组

利用concat进行递归处理数组拍平:

思路:
验证有没有深层数组,没有则返回,如果有进行拍平,继续递归处理

代码如下:

	function flat(arr) {
	// 验证 arr中,还有没有深层数组
	var isDeep = arr.some(item => item instanceof Array)
	if (!isDeep) {
	    //如果不是深层数组
	    return arr 
	}
	//是深层数组,拍平数组后,递归继续判断处理
	const res = Array.prototype.concat.apply([], arr)
	return flat(res)

}
const res = flat([1, 2, [3, [4, 6], 7], 5])
console.log(res) //[1, 2, 3, 4, 6, 7, 5]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值