1、概念
数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。例如将 [1, [2, [3, 4]]] 转化为 [1,2,3,4]
2、方法
(1)使用 flat()
let arr = [1, [2, [3, 4]]]
const res1 = arr.flat(Infinity)
(2)使用正则
const res2 = JSON.parse('[' + JSON.stringify(arr).replace(/[|]/g, '') + ']')
(3)使用递归
let arr = [1, [2, [3, 4]]]; function flattern(arr) { let result = []; for(let i = 0; i < arr.length; i++) { if(Array.isArray(arr[i])) { flattern(arr[i]) } else { result.push(arr[i]) } } return result; } console.log(flattern(arr));
(4)使用 reduce
function flatten(ary) { return ary.reduce((pre, cur) => { return pre.concat(Array.isArray(cur) ? flatten(cur) : cur); }, []); } let ary = [1, 2, [3, 4], [5, [6, 7]]] console.log(flatten(ary))
关于reduce方法详细介绍参考 https://www.cnblogs.com/amujoe/p/11376940.html
(5)使用扩展运算符
es6的扩展运算符能将二维数组变为一维: [].concat(...[1, 2, 3, [4, 5]]); // [1, 2, 3, 4, 5]
根据这个结果我们可以做一个遍历,若arr中含有数组则使用一次扩展运算符,直至没有为止。
function flatten(arr) { while(arr.some(item => Array.isArray(item))) { arr = [].concat(...arr); } return arr; }