var arr=[1,2,[3,4,[5,6,7]],9,[10,11]];
// 1) 方法一 循环数组+递归调用
function steamroller (arr){
var newArr=[];
for(var i=0;i Array.isArray(item))){
// arr=[].concat.apply([],arr);
//利用了 arr = arr.concat(1,2,[10,9],[8,7])这种用法
arr=Array.prototype.concat.apply([],arr)
}
return arr
}
console.log(steamroller2(arr));
// 3) 方法三 reduce方法
// 当数组中还有数组的话,递归调用steamroller3扁平函数(利用reduce扁平), 用concat连接,最终返回arr.reduce的返回值;
function steamroller3(arr){
return arr.reduce((prev,next)=>{
return prev.concat(Array.isArray(next)?steamroller3(next):next)
},[])
}
console.log(steamroller3(arr));
// 4) 方法四 es6 展开运算符
// 利用arr.some判断当数组中还有数组的话,递归调用flatten扁平函数(利用es6展开运算符扁平), 用concat连接,最终返回arr;
function steamroller4(arr){
while(arr.some(item=> Array.isArray(item))){
// arr=[].concat.apply([],arr)
arr=[].concat(...arr)
}
return arr
}
console.log(steamroller4(arr));
//利用join和split方法
function steamroller5(arr) {
return arr.join().split(',').map((item)=>+item)
}
console.log(steamroller5(arr));
function steamroller5b(arr) {
return (arr+'').split(',').map((item)=>+item)
}
console.log(steamroller5b(arr));
有没有高手分析下这几种方法那个最好啊 哪个算法复杂度最优