一、递归方法
var arr = [1, 2, null, [4, 5, "a", [6, 7, 8]]]
function filter(arr) {
var res = []
for(let i = 0; i < arr.length; i++){
if(Array.isArray(arr[i])){
res = res.concat(filter(arr[i]))
// arr.push.apply(arr,filter(arr[i]))
}else{
res.push(arr[i])
}
}
return res
}
console.log(filter(arr)); //[1, 2, null, 4, 5, "a", 6, 7, 8]
二、利用apply+some
function func2(arr){
while(arr.some(item=> Array.isArray(item))){
arr=[].concat.apply([],arr) //这是重点
}
return arr
}
console.log(func2(arr))
三、reduce方法
当数组中还有数组的话,递归调用funcr3扁平函数(利用reduce扁平), 用concat连接,最终返回arr.reduce的返回值;
function func3(arr){
return arr.reduce((prev,next)=>{
return prev.concat(Array.isArray(next)?func3(next):next)
},[])
}
console.log(func3(arr))
四、es6 展开运算符
利用arr.some判断当数组中还有数组的话,递归调用flatten扁平函数(利用es6展开运算符扁平), 用concat连接,最终返回arr;
function func4(arr){
while(arr.some(item=> Array.isArray(item))){
// arr=[].concat.apply([],arr)
arr=[].concat(...arr)
}
return arr
}
console.log(func4(arr))
五、split、join
toString之后再split转成数组,并将其转换回数字:
var arr1 = [1,2,3,[4,5,6,[7,8,9]]]
function func5(arr) {
return arr.toString().split(",")
}
console.log(func5(arr1))