zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Tornado web 框架
    mysql_orm模块操作数据库(17.6.29)
    mysql小结篇3 索引、分页、执行计划--(17.6.28)
    Oracle触发器Trigger2行级
    Oracle触发器Trigger基础1
    Oracle函数function
    Oracle异常的抛出处理
    Oracle利用过程procedure块实现银行转账
    Oracle存储过程procedure
    PL/SQL块loop..各种循环练习
  • 原文地址:https://www.cnblogs.com/BAHG/p/15188769.html
Copyright © 2011-2022 走看看