js里常见的数组扁平化
第一种方法:递归。
var arr = [1,[2,[3,4]]]; function myfc(aa){ var lastArr = [];
for(var i = 0;i<aa.length;i++){
if(Array.isArray(aa[i])){
lastArr.concat(myfc(aa[i]));
} else {
lastArr.push(aa[i]);
}
}
return lastArr;
}
console.log(myfc(arr));
var arr = [1, [2, [3, 4]]];
function flatten(arr) {
var result = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
console.log(flatten(arr));
第二种方法:reduce.
reduce( (prev,cur)=>{ },[])一个回调函数,一个初始值。 初始值给值,prev就有值,没给prev就是数组索引为0的元素
注意: reduce() 对于空数组是不会执行回调函数的。
var thisArr = [1, [2, [3, 4]]];
function myReduce(arr){
return arr.reduce((prev,cur)=>{
return prev.concat(Array.isArray(cur) ? myReduce(cur) : cur);
},[])
}
console.log(myReduce(thisArr))
第三种方法flat(depth)
es6
提供了一个新方法 flat(depth)
,参数depth
,代表展开嵌套数组的深度,默认是1
let arr = [1, [2, 3, [4, [5]]]]; arr.flat(3); // [1,2,3,4,5]