方法一:
var arr=[1,[2,[3,[4,5]]]];
function flatten(arr){
var len=arr.length;
var temp=[];
for(var i=0;i<len;i++){
if(Array.isArray(arr[i])){
var child=flatten(arr[i]);
temp=temp.concat(child)
}else{
temp.push(arr[i]);
}
}
return temp;
}
console.log(flatten(arr))
方法二:(es6)
const flatten=arr=>arr.reduce((a,b)=>a.concat(Array.isArray(b)?flatten(b):b),[])
控制扁平的层数:
depth为1是因为它不走递归,多层才递归
function flatten(arr,depth){
var len=arr.length;
var temp=[];
if(depth===1){
for(var i=0;i<len;i++){
if(Array.isArray(arr[i])){
for(var j=0,len1=arr[i].length;j<len1;j++){
temp.push(arr[i][j]);
}
}
}
}else{
for(var i=0;i<len;i++){
if(Array.isArray(arr[i])&&depth){
temp=temp.concat(flatten(arr[i],depth--));
}else{
temp.push(arr[i])
}
}
}
return temp;
}
var arr = [1, 2, [3, 4],[5, 6, [7, 8, [12, 13]], 9], 10, 11];
console.log(flatten(arr,1));