js数组扁平化的几种方式

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;
}
原文地址:https://www.cnblogs.com/BAHG/p/15188769.html