数组扁平化:就是将一个嵌套多层的数组转换为只有一层的数组。
实现结果:
var arr=[1,[2,[3,4]]];//偏平化后[1,2,3,4]
1.递归:循环数组元素,如果还是一个数组,就递归调用改方法
function flatten(arr){
var res = [];
for(var i=0;i<arr.length;i++){
if(Array.isArray(arr[i])){
res = res.concat(flatten(arr[i]));
}else{
res.push(arr[i]);
}
}
return res;
}
2.reduce():接受一个函数作为累加器,数组中的每个值从左到右开始缩减,最终计算为一个值。
reduce():可以作为一个高阶函数,用于函数的compose。
注意:reduce()对于空数组是不会执行回调函数的。
function flatten(arr){
return arr.reduce(function(prev,item){
return prev.concat(Array.isArray(item)?flatten(item):item);
},[]);
}
3.toString():如果数组元素都是数字,那么我们可以考虑使用toString方法,因为toString可以将数组中的数以逗号形式结合起来
toString之后再split,转化为数组
[1, [2, [3, 4]]].toString() // "1,2,3,4"
function flatten(arr){
return arr.toString().split(',').map(function(item){
return +item;
})
}
4.es6扩展运算符
function flatten(arr){
while(arr.some(item=>Array.isArray(item)){
arr = [].concat(...arr);
}
return arr;
}
但是这个扩展运算符只能展开一层数组