zoukankan      html  css  js  c++  java
  • Js多维数组拆分为一维数组(数组扁平化)

    1.使用reduce

    const flatten = arr => {
      return arr.reduce((pre, cur) => {
        return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
      }, [])
    }
    const res = flatten(arr);

    2.利用ES6---map()

    var arr1 = [[0, 1], [2, 3], [4, 5]];
    function flatten(arr) { return [].concat( ...arr.map(x => Array.isArray(x) ? flatten(x) : x) ) }
    var arr2 = flatten(arr1); // arr2 [0, 1, 2, 3, 4, 5]
    
    优点: 多维数组也可以
    比如:var arr = [[1,2],3,[[[4], 5]]]
    

    3.使用flat()

    const res = arr.flat(Infinity);

    4.函数递归

    const res = [];
    const fn = arr => {
      for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
          fn(arr[i]);
        } else {
          res.push(arr[i]);
        }
      }
    }
    fn(arr);

    5.利用正则

    //1.基本正则
    const res = JSON.stringify(arr).replace(/[|]/g, '').split(',');
    //但数据类型都会变为字符串
    
    //2.改良正则
    const res= JSON.parse('[' + JSON.stringify(arr).replace(/[|]/g, '') + ']');

    6.利用apply实现(二维转一维)

    var arr1 = [[0, 1], [2, 3], [4, 5]];
    var arr2 = [].concat.apply([], arr1);
    // arr2 [0, 1, 2, 3, 4, 5]
    

    7.通过将数组转变成字符串,利用str.split(',')实现。缺点是数组元素都变字符串了(二维转一维)

    var arr1 = [[0, 1], [2, 3], [4, 5]];
    
    var arr2 = (arr1 + '').split(',');
    
    var arr2 = arr.toString().split(',');
    
    var arr2 = arr.join().split(',');
    
    // arr2 ["0", "1", "2", "3", "4", "5"]
  • 相关阅读:
    网络流
    第k短路(Dijkstra & A*)
    线段树(区间修改)
    线段树(单点修改)
    分块
    单调队列
    NOIP 2006 T2 金明的预算方案
    背包
    CH 6021 走廊泼水节
    关于数字序列匹配的一些问题(lis, lcs, lcis等)
  • 原文地址:https://www.cnblogs.com/yxkNotes/p/11981097.html
Copyright © 2011-2022 走看看