数组扁平化

原数组
const arr = [1, [2, 3, 4], [5, 6, [7, 8]], 9]
希望输出 [1, 2, 3, 4, 5, 6, 7, 8, 9]

// 方法一  递归
function arrDelayering (arr) {
	arr.forEach(v => {
		if (v instanceof Array) {
			arrDelayering(v)
		} else {
			newArr.push(v)
		}
	})
	return newArr
}
let newArr = []
arrDelayering(arr)	//  [1, 2, 3, 4, 5, 6, 7, 8, 9]

MDN Array.prototype.concat() 描述

MDN Function.prototype.apply()描述

// 方法二 利用apply concat

// concat:如果concat方法的参数是一个元素,该元素会被直接插入到新数组中;
如果参数是一个数组,该数组的各个元素将被插入到新数组中

// apply:apply方法会调用一个函数,apply方法的第一个参数会作为被调用函数的this值,
apply方法的第二个参数(一个数组,或类数组的对象)会作为被调用对象的arguments值,
也就是说该数组的各个元素将会依次成为被调用函数的各个参数;

function arrDelayering2(arr) {
	while(arr.some(a => Array.isArray(a))) {
		// 方法二
		//  [].concat.apply([], arr) 括号中的[] 是指在  [].concat 函数运行时使用的 this 值
		// 括号中的arr数组元素将作为单独的参数传给 [].concat 函数
		// 返回值:调用有指定this值 即括号中的[] 和 参数的函数的结果 即括号中的arr数组元素
		
		arr = [].concat.apply([], arr)
		//  或者 arr = Array.prototype.concat.apply([], arr)
		
		// 方法三 es6展开运算符
		// arr = [].concat(...arr)
	}
	return arr
}
arrDelayering2(arr)	 //  [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值