1、toString
const arr = [1, 2, 3, [4, 5, [6, 7]]];
const flatten = arr.toString().split(',');
console.log(flatten);
//["1", "2", "3", "4", "5", "6", "7"]
优点:简单,方便,对原数据没有影响
缺点:最好数组元素全是数字或字符,不会跳过空位
2、join
const arr = [1, 2, 3, [4, 5, [6, 7]]];
const flatten = arr.join(',').split(',');
console.log(flatten);
//["1", "2", "3", "4", "5", "6", "7"]
优点和缺点同toString
3、flat
const arr = [1, 2, 3, [4, 5, [6, 7]]];
const flatten = arr.flat(Infinity); //Array.flat(n) n表示维度
console.log(flatten);
//["1", "2", "3", "4", "5", "6", "7"]
优点:会跳过空位,返回新数组,不会修改原数组
4、扩展运算符(…)
const arr = [1, 2, 3, [4, 5]];
console.log([].concat(...arr));
//["1", "2", "3", "4", "5"]
优点:简单,方便 缺点:只能扁平化一层
5、递归
function flat(arr) {
let result = []
for (let i of arr) {
Array.isArray(i) ? result = result.concat(flat(i)) : result.push(i)
//i是Array的实例?是的话继续递归展开,不是的话将i放入结果数组
}
return result
}
flat(arr)
6、reduce()递归
function flat(arr) {
return arr.reduce((a, i) => {
return a.concat(i instanceof Array ? flat(i) : i)
}, [])
}
flat(arr)
7、some+while
while (arr.some(Array.isArray)) {
arr = [].concat(...arr);
}
参考自:1、https://juejin.cn/post/6907269018588020743
2、https://lolitasian.blog.csdn.net/article/details/105156340