【问题标题】:Transform nested arrays of integers into a flat array of integers - javascript将嵌套的整数数组转换为平面整数数组 - javascript
【发布时间】:2015-11-28 18:52:06
【问题描述】:

我的问题的工作背景是数据可视化。 以这种方式将嵌套的整数数组转换为平面整数数组是否正确?

var inputArray = [[1, 2, [3]],4,[5, [6, [7,8],[9]]],10];

var inputArrayStr = inputArray.toString(); 
var outputArrayInt = JSON.parse("[" + inputArrayStr + "]");

console.log(outputArrayInt); // --> [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

【问题讨论】:

  • “以这种方式将嵌套的整数数组转换为平面整数数组是正确的吗?”预期的结果是什么?
  • [[1, 2, [3]],4,[5, [6, [7,8],[9]]],10] --> [ 1, 2, 3 , 4, 5, 6, 7, 8, 9, 10 ]
  • 嗯,它可以工作,但是根据使用它的位置,您可能希望避免对此类工作进行字符串操作
  • 你可以json.stringify然后替换所有[和]
  • 如果您的数组只有数字而不是逗号inputArray.toString().split(',') 应该可以工作

标签: javascript arrays database dashboard


【解决方案1】:

我建议为此任务使用特殊功能。

function flat(a) {
    var b = [];
    a.forEach(function (c) {
        if (Array.isArray(c)) {
            b = b.concat(flat(c));
        } else {
            b.push(c);
        }
    });
    return b;
}

var inputArray = [[1, 2, [3]], 4, [5, [6, [7, 8], [9]]], 10],
    outputArray = flat(inputArray);

document.write('<pre>' + JSON.stringify(outputArray, 0, 4) + '</pre>');

【讨论】:

    【解决方案2】:

    您可以使用 Array.prototype.concat.apply 逐步展开数组。

    function flat(arr) {
        var result = arr;
        while(result.some(Array.isArray)) {
            result = Array.prototype.concat.apply([], result);
        }
        return result;
    }
    
    console.log(flat([[1, 2, [3]], 4, [5, [6, [7, 8], [9]]], 10])); 
    // [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
    

    解释上面的代码:

    Array.prototype.concat.apply([], [[1, 2, [3]],4,[5, [6, [7, 8],[9]]], 10]) ;
    

    基本相同:

    [].concat([1, 2, [3]], 4,[5, [6, [7, 8], [9]]], 10);
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      输入数组:var inputArray = [[1, 2, [3]],4,[5, [6, [7,8],[9]]],10];

      结果为字符串:

      var stringResult=inputArray.toString();
      

      stringResult => "1,2,3,4,5,6,7,8,9,10"

      结果为数组:

      var stringArray=stringResult.split(',');
      var arrayResult=[];
      for(var s in stringArray){
      arrayResult.push(parseInt(s));
      }
      

      arrayResult => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

      【讨论】:

        【解决方案4】:

        现代方式

        const flattenArray = (arr) => arr.reduce((prev, curr) => (Array.isArray(curr) ? prev.concat(flattenArray(curr)) : prev.concat(curr)), []);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-11
          • 1970-01-01
          • 1970-01-01
          • 2013-07-26
          • 2021-07-08
          相关资源
          最近更新 更多