zoukankan      html  css  js  c++  java
  • js多维数组扁平化

    数组扁平化,就是将多维数组碾平为一维数组,方便使用。

    一:例如,一个二维数组 var arr = ['a', ['b', 2], ['c', 3, 'x']],将其扁平化:

    1.  通过 apply 借用数组的 concat 方法:

    [].concat.apply([], arr);

    结果如下:

    jQuery 中的 map 方法就用到了这个技巧。

    但如果直接调用 concat 方法,[].concat(arr),就没有扁平化效果。

    2扩展运算符...

    [].concat(...arr)

    3. reduce(ES5新增的数组方法):

    [['a'], ['b', 2], ['c', 3, 'x']].reduce((a, b) => a.concat(b), []);

    二:对于三维及以上的数组:

    1. 数组每一项都是简单类型,如数字:

    var arr = [[1], [[2, 3], [4]], 5, 6];
    arr.toString().split(',').map(item => +item);

    2. 递归:

     1 var flatten = function(arr) {
     2     var isArray = function(arr) {
     3             return Array.isArray(arr) || Object.prototype.toString.call(arr) === '[object Array]';
     4         },
     5         ret = [],
     6         item;
     7 
     8     if (!isArray(arr)) {
     9         return;
    10     }
    11 
    12     for (var i = 0; i < arr.length; i++) {
    13         item = arr[i];
    14         if (isArray(item)) {
    15             ret = ret.concat(flatten(item));
    16         } else {
    17             ret.push(item);
    18         }
    19     }
    20 
    21     return ret;
    22 };
    23 
    24 flatten(  [ 'a', [[[['b', 2]]]], ['c', [3, 'x']] ]  );

    该方法对任意维数组都有效。

    三:flat (ES6方法)

    flat(Infinity) 可将任意维数组转成一维数组

  • 相关阅读:
    C# 关键字 default
    nopCommerce_3.00-Nop.Core.Caching
    汉字转拼音
    ASP.NET MVC性能调试工具-MvcMiniProfiler
    开源项目
    UVA 11374 Airport Express 最短路
    UVA 10319 Manhattan 2-sat
    UVA 1357 Cells
    UVA 610 Street Directions 双连通分量
    UVA 11504 Dominos 强连通分量
  • 原文地址:https://www.cnblogs.com/caihg/p/6519422.html
Copyright © 2011-2022 走看看