数组的扁平化,就是将一个嵌套多层的数组转换为只有一层的数组。如[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;
}