// 什么是数组扁平化
// 将嵌套多层的数组,转为一层数组 叫做数组扁平化
var arr = [1, [2, [3]]]
// [1,2,3]
var res = arr.join('');
res = res.split('');
console.log(res);
上面的方式遇到下面请情况就会有问题
var arr1 = ['1',['2',['3']]]
var res = []
// var a = 0,b = 3 一个var 声明两个变量;都有变量提升
for(var i = 0,len= arr.length;i<len;i++){
if(Array.isArray(arr[i])){
var arr2 = arr[i]
for(var j = 0;j<arr2.length;j++){
if(Array.isArray(arr2[j])){
var arr3 = arr2[j]
for(var k = 0 ;k<arr3.length;k++){
res.push(arr3[k])
}
}else{
res.push(arr2[j])
}
}
}else{
res.push(arr[i])
}
}
console.log(res);
// 最开始是循环数组 如果还是素组进行递归处理
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 {
// 如果不是数组,直接添加到res 上
res.push(arr[i])
}
}
return res;
}
var res = flatten(arr)
console.log(res);
// 方法二:
// // 这种方法有局限性 ['1',['2','3',2],2]
function flatten(arr){
var result = []
result = arr.toString().split(',').map(function(item){
return +item;
})
return result;
}
// 方式三:
// 我们对数组处理;最终都是为了返回一个值。reduce
function flatten(arr) {
return arr.reduce(function (pre, item) {
// return pre.concat(item)
return pre.concat(Array.isArray(item) ? flatten(item) : item)
}, [])
}
var res = flatten([1, 2, 3, [1, 2]])
console.log(res);