• 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;
    }
  • 相关阅读:
    P4097 [HEOI2013]Segment 李超线段树
    P3592 [POI2015]MYJ
    P3698 [CQOI2017]小Q的棋盘
    P4098 [HEOI2013]ALO 可持久化01Trie
    P2331 [SCOI2005]最大子矩阵
    P4099 [HEOI2013]SAO
    loj #6032. 「雅礼集训 2017 Day2」水箱 线段树优化DP转移
    CF765F Souvenirs 离线+线段树+主席树
    CF1097D Makoto and a Blackboard
    loj #6570. 毛毛虫计数
  • 原文地址:https://www.cnblogs.com/BAHG/p/15188769.html
Copyright © 2020-2023  润新知