一、扁平化函数
(1)将每个非数组元素一个一个push到新数组,遍历到数组元素时,递归调用扁平化函数。
function flatten(arr){
let flattenedArr = [];
function isArray(obj){
return {}.toString.call(obj) === '[object Array]'
}
function flattenFn(arr){
arr.forEach((item)=>{
if(isArray(item)){
flattenFn(item)
}else{
flattenedArr.push(item)
}
})
}
flattenFn(arr)
return flattenedArr
}
let arr = [1,2,[3,{},[5,[6],[7]]]];
console.log(flatten(arr))
(2)创建一个新数组,遍历数组,如果遇到非数组元素,则push进新数组,如果遍历到数组元素,则递归调用该函数。利用concat,
function flatten(arr){
let len = arr.length,
fArr = [],
item;
function isArray(obj){
return {}.toString.call(obj) === '[object Array]'
}
for(var i = 0; i < len; i++ ){
item = arr[i];
if(isArray(item)){
fArr = fArr.concat(flatten(item))
}else{
fArr.push(item)
}
}
return fArr
}
let arr = [1,2,[3,{},[5,[6],[7]]]];
console.log(flatten(arr))
(3)利用reduce
function flatten(arr){
if({}.toString.call(arr) !== '[object Array]'){
throw new Error('only array is accecpted')
}
let farr = arr.reduce((accumulotar,item)=>{
if({}.toString.call(item) === '[object Array]') {
accumulotar = accumulotar.concat(flatten(item))
}else{
accumulotar.push(item)
}
return accumulotar
},[])
return farr
}
let arr = [1,2,[3,{},[5,[6],[7]]]];
console.log(flatten(arr))