一、代码最少的扁平化,利用es6中数组flat()方法(推荐使用)
// 利用flat() 参数为指定要提取嵌套数组的结构深度,默认值为 1,
// 参数为:Infinity,可展开任意深度的嵌套数组
function flatten4(arr) {
return arr.flat(Infinity);
}
console.log(flatten4([1, [2, [3, 4]]]));//[ 1, 2, 3, 4 ]
二、如果数组中的元素都为数字
利用toString进行扁平化(推荐使用)
// 如果数组里面都是数字,可以使用toString
function flatten1(arr) {
let arr1 = arr.toString().split(",");
return arr1.map((item) => {
return +item;
})
}
console.log(flatten1([1, [2, [3, 4]]]));[ 1, 2, 3, 4 ]
三、利用递归实现
1.循环递归
function flatten(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) { //如果是数组,就进行flatten
result = result.concat(flatten(arr[i])) //数组的拼接
} else {
result.push(arr[i]);
}
}
return result;
}
console.log(flatten([1, [2, [3, 4]]])); //[ 1, 2, 3, 4 ]
2.利用数组api简化代码
// reduce 利用数组API进行递归
function flatten2(arr) {
return arr.reduce((prev, item) => {
return Array.isArray(item) ? prev.concat(flatten2(item)) : prev.concat(item); //这里不能用push 因为push返回的数组长度,
}, [])
}
console.log(flatten2([1, [2, [3, 4]]])); //[ 1, 2, 3, 4 ]
3.利用扩展运算符
//es6中的数组扁平化利用扩展运算符...
function flatten3(arr) {
return arr.reduce((prev, item) => {
return Array.isArray(item) ? [...prev, ...flatten2(item)] : [...prev, item];
}, [])
}
console.log(flatten3([1, [2, [3, 4]]])); //[ 1, 2, 3, 4 ]
除了这上面这几种方法,还有其他的方法,可以进行其他的方法进行扁平化,这几种是小编觉得比较简单,并且好用的。
学习的路,永无止境。