数组扁平化

数组的扁平化,就是将一个嵌套多层的数组转换为只有一层的数组。如[1,[2,[3,4]]]经扁平化处理后为[1,2,3,4]。

数组扁平化实现方法:

1.递归

循环遍历数组,如果数组元素为一个数组,则递归调用扁平化方法。使用Array.isArray()来判断是否为数组。

//1.递归
function flatten(arr){
	var result=[];
	for(var i=0;i<arr.length;i++){
		if(Array.isArray(arr[i])){
			result=result.concat(flatten(arr[i]));
		}else{
			result.push(arr[i]);
		}
	}
	return result;
}

2.toString()

这种方法只适用于数组元素均为数字类型。

//2.toString 适用于数组元素为数字
function flatten(arr){
	return arr.toString().split(",").map(function(item){
		return +item;
	});
}

3.reduce

ES5的Array新增的一种针对数组逐项处理方法。reduce()接受一个函数作为累加器,第二个可选参数为赋予的初始值。

//3. ES5的reduce
function flatten(arr){
	return arr.reduce(function(prev,cur){
		return prev.concat(Array.isArray(cur)?flatten(cur):cur);
	},[]);
}

4.ES6的扩展运算符

ES6增加了扩展运算符,用于去除参数对象的所有可遍历属性,并拷贝到当前对象中。

//4.ES6的扩展运算符
function flatten(arr){
	while(arr.some(item => Array.isArray(item))){
		arr=[].concat(...arr);
	}
	return arr;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值