第一种方法:concat+apply
var arr = [1,[2,3],[4,5]];
var newArr = [].concat.apply([],arr);
解释:利用apply以数组方式传参的特性以及concat原生的多数组合并特性,相当于concat([],[1],[2,3],[4,5])。
缺点:只能二维转一维。
第二种方法:join+split
var arr = [1,[2,[[3,4],5],6]];
var newArr = arr.join(',').split(',');
解释:利用join将数组中所有元素放入一个字符串,再用split分割。
缺点:数字类型变成字符串类型
第三种方法:递归
var arr = [1,[2,[[3,4],5],6]];
var newArr = [];
function fun(arr){
for(var i=0;i<arr.length;i++){
if(Array.isArray(arr[i])){
fun(arr[i]);
}else{
newArr.push(arr[i]);
}
}
}
fun(arr);
解释:利用isArray判断是否存在嵌套数组,存在则递归,不存在则放入新的一维数组中。
缺点:不优雅,以及可能存在内存溢出问题。
第四种方法:flat
var arr = [1, 2, [3, 4, [5, 6]]];
var newArr=arr.flat(Infinity);
解释:利用ES6的flat与Infinity关键字,一行代码实现递归的功能。
缺点:需要浏览器支持ES6,或者使用Polyfill进行转码。