数组的扁平化
-
数组的扁平化: 即将多维数组经过代码实现后 变为一维数组
-
回调函数实现
const arr = [1,2,3,[4,5,[6,7,[8,9]]]];
console.log('原型:', arr);
function fun(origin){
// 定义一个空数组 用于存储扁平化后的数组
let newArr = [];
// 数组吧扁平化的核心函数
function dun(origins){
// 通过循环遍历拿到所有数据
origins.forEach(function(item){
// 判断当前遍历到的数据是否为数组
if(Object.prototype.toString.call(item) === '[object Array]'){
// 再次调用 dun() 函数
dun(item);
}else{
// 如果不是数组 直接新增到 数组
newArr.push(item);
}
})
}
// 调用内部函数
dun(origin);
// 将新数组返回
return newArr;
}
// 接收 函数调用的值
const res = fun(arr);
console.log('扁平化后的数组:', res);
-
普通递归实现
通过for循环遍历到数组的每一个数据,并判断当前数据是否为数组,如果为数组,就将里面的数据逐一拼接到新数组中,如果不是数组,就新增到新数组末尾
let arr = [1,2,3,[4,5,[6,7,[8,9]]]];
function fun(arr){
let newArr = []; // 定义一个空数组,用于存储扁平化后的数组
// 通过循环遍历数组中每一个数据
for(let i = 0; i < arr.length; i++){
// 判断当前数据是否为数组
if(Array.isArray(arr[i])){
// console.log(1);
// 如果是数组 就将当前数组拼接到数组中
newArr = newArr.concat(fun(arr[i]));
}else{
// 如果不是数组 新增到末尾
newArr.push(arr[i]);
}
}
return newArr; // 将扁平化后的新数组返回
}
let res = fun(arr); // res 接收函数
console.log('原数组:',arr);
console.log('扁平化后的数组:',res);
-
通过reduce数组遍历实现
通过reduce 遍历拿到所有arr中 的数据, 将其作为返回值返回 ,reduce 的第一个参数用来接收拼接后的值 而第二个参数是当前遍历的数据 通过 三元运算符 判断 当前遍历的是否为数组 ,如果是数组 就再次调用函数, 如果不是数组,则直接拼接到prev中
let arr = [1,2,3,[4,5,[6,7,[8,9]]]];
function fun(arr){
return arr.reduce(function(prev,arr1){
return prev.concat(Array.isArray(arr1)? fun(arr1) : arr1);
},[])
}
let res = fun(arr);
console.log(res);
- 数组扁平化的方法
- flat() 数组给我们提供的扁平化的方法,需要接受一个 参数, 代表 拆 几层, 默认不传递为 1
- Infinity: 在 JS 中代表 正无穷,-Infinity: 负无穷
let arr = [1,2,3,[4,5,[6,7,[8,9]]]];
console.log('原型:', arr);
const newArr = arr.flat(Infinity);
console.log('扁平化后的数组:', newArr );