【问题标题】:How to create a function for flatten an array? Multi dimensional array to one dimensional array in Javascript [duplicate]如何创建一个用于展平数组的函数? Javascript中的多维数组到一维数组[重复]
【发布时间】:2016-06-12 15:19:59
【问题描述】:

我正在阅读 ruby​​ 的数组展平函数并在 Javascript 中寻找类似的函数,但没有找到。所以,我自己创造了它。

    Input: [[1,2,[3]],4]
    Output : [1,2,3,4]

如果您想使用 reduce/concate 方法,您将无法获得多维数组的所需答案。

你认为的解决方案代码是什么?!!!

【问题讨论】:

  • @AndrewMorton 看起来很相似,但是对于嵌套的多维数组,该解决方案不起作用。如果您为这个给定的数组尝试该解决方案,您将看到: [1,2,[3],4 ] 。但我想要 [1,2,3,4] 所以,这并没有解决我的问题,我写了这个解决方案
  • 如果都是数字可以newArr = arr.toString().split(',').map(Number)
  • @dmsbilas 链接的线程很长,但this answer 是您需要的线程。
  • 无论如何,这是我使用splice而不是concat的解决方案,这可能会减少内存使用量:gist.github.com/cky/db218f63441e292fabf50d03c0f1b722
  • var givenArr = [[1,2,[3]],4]; var arrString = JSON.stringify(givenArr); var stripped = arrString.replace(/\D/g,''); var newArr = stripped.split('').map(Number);

标签: javascript flatten


【解决方案1】:

所以,这是我用来解决问题的代码。

    var givenArr = [[1,2,[3]],4];
    var outputArray = [];

    function typeOf(value) {
      var s = typeof value;
      if (s === 'object') {
        if (value) 
          {
            if (Object.prototype.toString.call(value) == '[object Array]') {
              s = 'array';
            }
          }else{
          s = 'null';
        }
      }
      return s;
    }

    function getElementFromArray(array)
    {
        if(array.length == 0 ) return;
        for(var i = 0; i< array.length; i++ )
        {
            if( typeOf(array[i]) === 'array' )
            {
                getElementFromArray(array[i]);
            }else{
                 outputArray.push(array[i]);
            }
        }
     }//end getElementFromArray

     getElementFromArray(givenArr);

     console.log(outputArray);

     //output [1,2,3,4]

【讨论】:

    猜你喜欢
    • 2014-08-16
    • 1970-01-01
    • 2011-07-26
    • 2018-06-17
    • 2011-10-18
    • 2019-07-18
    • 2015-07-21
    • 2011-02-03
    • 2020-05-23
    相关资源
    最近更新 更多