定义什么是数组扁平化?
答:将嵌套多层的数组 转化为一层数组 ,叫数组扁平化
方法一: flatten用法:可以理解为将嵌套数组的维数减少,嵌套数组将递归为一维数组,不然只减少嵌套数组一个级别的维数
最开始是循环数组 如果还是数组的话则进行递归处理
初始化扁平化的数组
function flatten(arr) {
// 最开始是循环数组 如果还是数组进行递归处理
// 初始化扁平化的数组
var res =[];
// 遍历 需要扁平化的数组 arr
for (var i=0,len = arr.length;i<len;i++){
// 如果arr[i] 是数组;进行递归的处理
if(Array.isArray(arr[i])){
// bug 返回是最内层的数组;
// res = flatten(arr[i])
// 解决 将现在 res 与扁平化的数组进行合并处理
res =res.concat(flatten(arr[i]))
}else{
// 如果不是数组 直接添xin加到 res 上
res.push(arr[i])
}
}
return res;
}
var res =flatten(arr)
console.log(res);
方法二:这种方法有局限性 看下面的列子
// 有局限性 [1,['2','3',2],'2']
var res = [1,['54','545',5],'954']
function flatten(arr){
var result = []
result = arr.toString().split(',').map(function(item){
return +item;
})
return result;
}
console.log(res)
方法三:
一般对数组处理,最终都是为了返回一个值 reduce
function flatten(arr){
var res =arr.reduce(function(pre,item){
// return per.concat(item)
return pre.concat(Array.isArray(item)? flatten(item):item)
},[])
return res
}
var res = flatten([1,2,3,[1,2]])
console.log(res);
方法四:(tostring)
如果arr数组中有空数组,不使用此方法,用下面的方法;同时得到数组的值是字符串,不是数字
var arr=[1,2,3,4,[5,6.7,[45]]];
var newArr=arr.toString().split(',')
console.log(arr,newArr)