【问题标题】:Javascript: Turn a nested array into a single array using a nested for loopJavascript:使用嵌套 for 循环将嵌套数组转换为单个数组
【发布时间】:2018-11-22 16:19:48
【问题描述】:

这只是我正在做的一个简单的 JavaScript 练习。

我正在尝试转换这个数组...

var array = [
[1,2],
[3,4],
[5,6]
];

进入...

array = [1, 2, 3, 4, 5, 6];

通过使用这个嵌套的 for 循环。

var series;
var storage = [];
for (var i = 0; i < array.length; i++) {
    for (var j = 0; j < array[i].length; j++) {
        series = array[i][j];
        for (var k = 0; k < 6; k++) {
            storage[k] = series;
        };
    };
};

console.log(storage);

输出...

//Output: [6, 6, 6, 6, 6, 6]

为什么这是输出,我该如何解决?

【问题讨论】:

    标签: javascript loops for-loop nested


    【解决方案1】:

    for (var k = 0; k &lt; 6; k++) { 不是必需的。 array[i] 将是主数组中的每个元素,因此遍历 array[i] 您可以访问每个元素

    var array = [
      [1, 2],
      [3, 4],
      [5, 6]
    ];
    
    
    var series;
    var storage = [];
    for (var i = 0; i < array.length; i++) {
      for (var j = 0; j < array[i].length; j++) {
        storage.push(array[i][j])
      };
    };
    
    console.log(storage);

    【讨论】:

      【解决方案2】:
          series = array[i][j];
          for (var k = 0; k < 6; k++) {
              storage[k] = series;
          };
      

      说真的,在这里您为结果数组的每个元素设置相同的值。

      你可能需要类似的东西

      for(let x of array) {
          for(let y of x) {
              storage.push(y)
          }
      }
      

      或者,如果你的 JS 机器足够实验性,那么简单

      var storage = array.flat()
      

      【讨论】:

        【解决方案3】:

        您可以混合使用reduceconcat 在一行中实现您想要的效果

        var array = [
          [1, 2],
          [3, 4],
          [5, 6]
        ];
        
        console.log(array.reduce((a, v) => a.concat(v), []));

        至于你的代码为什么不起作用,主要是这一点

        for (var k = 0; k < 6; k++) {
            storage[k] = series;
        };
        

        它将用series的最后一个值覆盖数组中的所有内容,在您的情况下为6

        【讨论】:

          【解决方案4】:

          Array.concat 可以自己做这个

          var merged = [].concat.apply([], array);
          

          【讨论】:

            【解决方案5】:

            var array = [
            [1,2],
            [3,4],
            [5,6]
            ];
            var newArray = [];
            for (let i = 0; i < array.length; i++) {
               newArray = newArray.concat(array[i]); 
            
            }
            console.log(newArray)

            【讨论】:

              【解决方案6】:

              你可以使用array.flat()

              参考:flatten

              var array = [
                [1,2],
                [3,4],
                [5,6]
              ];
              array.flat();
              // 1,2,3,4,5,6....
              

              【讨论】:

                【解决方案7】:

                你可以像这样使用 ES6 扩展语法:

                for (let element of array){
                    storage.push( ... el )
                }
                

                【讨论】:

                  【解决方案8】:
                  storage = [];
                  for(var i=0; i<array.length; i++)
                      storage = storage.concat(array[i]);
                  

                  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2021-10-23
                    • 1970-01-01
                    • 2021-09-16
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-08-08
                    • 1970-01-01
                    • 2022-07-06
                    相关资源
                    最近更新 更多