数组扁平化:将数组中嵌套的数组拉平变成一维数组。
方法1:reduce,遍历数组每一项,若值为数组则递归遍历,否则concat
代码如下
let arr = [1, [2, 3, [4, 5], 6]];
//方法1:reduce,遍历数组每一项,若值为数组则递归遍历,否则concat
function flatten(arr) {
return arr.reduce((prev, item) => {
return prev.concat(Array.isArray(item) ? flatten(item) : item);
}, [])
}
let res = flatten(arr);
console.log(res);
方法2:使用数组方法join和字符串方法split进行数组扁平化
代码如下
//方法2:使用数组方法join和字符串方法split进行数组扁平化
let arr1 = [4, 1, 2, 3, 6, [7, 8, [3, 9, 10, [4, 6, 11]]]];
let res1 = arr1.join(",").split(",").map(Number);
console.log(res1);
方法3:通过正则方法和JSON.stringify()方法和数组方法
代码如下
//方法3:通过正则方法和JSON.stringify()方法和数组方法
let res3 = JSON.stringify(arr1).replace(/\[|\]/g, "").split(",").map(Number);
console.log(res3);
方法4:通过递归-判断获取的当前值是不是数组,是数组就递归调用
代码如下:
//方法4:通过递归
//原理:判断获取的当前值是不是数组,是数组就递归调用
let res4 = [];
let fun = arr => {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
fun(arr[i]);
} else {
res4.push(arr[i]);
}
}
}
fun(arr1)
console.log(res4);
方法5:ES6新增方法flat()
- 当没有参数时表示将二维数组转为一维数组
- 传入2时,表示将两层嵌套数组转为一维数组
- Infinity使用这个关键字可以将所有包含的数组转为一维数组
代码如下:
//方法5:ES6新增方法flat()
//当没有参数时表示将二维数组转为一维数组
//传入2时,表示将两层嵌套数组转为一维数组
//Infinity使用这个关键字可以将所有包含的数组转为一维数组
let res5 = arr1.flat(Infinity);
console.log(res5);
方法6:借助展开方法
let res6 = [];
for (let i = 0; i < arr1.length; i++) {
if (Array.isArray(arr1[i])) {
res6.push(...arr1[i]);
} else {
res6.push(arr1[i]);
}
}
console.log(res6);
以上,结束~~~~~~