【问题标题】:Merge two of one dimensional array into two dimensional array javascript将两个一维数组合并为二维数组javascript
【发布时间】:2017-10-16 09:48:58
【问题描述】:

我有n(但现在,假设只有两个)一维数组,就像我的控制台的这张图片:

我想通过对应的键合并这两个数组,放入二维数组中:

结果是这样的:

[["1 279 226,08" , "127"],[null , null],["-188 033,77", "154"],..... so on ......]

而且一维数组的列表是动态的,可以是2个以上的数组。

例如,如果我有 3 个数组,那么我的二维数组将如下所示:

[ ["1 279 226,08" , "127" , "blabla"], [null , null , "blabla"], ["-188 033,77", "154", "blabla"], ..... so on ......]

任何实现它的想法都将不胜感激。

【问题讨论】:

  • 请以文本形式添加原始数据作为输入,并添加相应的所需输出以及您尝试过的内容。
  • 一维数组有固定长度吗?它们的大小相同吗?
  • @RobertoRusso :长度是动态的,但所有数组的大小相同。

标签: javascript arrays multidimensional-array


【解决方案1】:

您可以使用嵌套循环转置数组并切换索引以分配值。

var array = [["1 279 226,08", null, "-188 033,77"], ["127", null, "154"], ["blabla", "blabla", "blabla"]],
    result = array.reduce(function (r, a, i) {
        a.forEach(function (b, j) {
            r[j] = r[j] || [];
            r[j][i] = b;
        });
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    由于所有数组都具有相同的大小,因此您可以仅在第一个数组的长度上循环,即a

    然后我们将ab、...的单个值传递给appendArrays,然后我们返回一个数组以推入merged

    var a = ["123", null, "ciao"]
    var b = ["321", 1, "pippo"]
    var c = ["111", 5, "co"]
    
    var merged = []
    
    for (i = 0; i < a.length; i++) {
      merged.push(appendArrays(a[i], b[i], c[i]));
    }
    console.log(merged);
    
    function appendArrays() {
      var temp = []
      for (var i = 0; i < arguments.length; i++) {
        temp.push(arguments[i]);
      }
      return temp;
    }

    【讨论】:

      【解决方案3】:

      这应该做你想做的。

      var arr1 = [1, 2, 3, 4, 5, 6];
      var arr2 = [6, 5, 4, 3, 2, 1];
      var arr3 = [7, 8, 9, 10, 11, 5];
      var arr4 = [12, 34, 55, 77, 22, 426];
      
      var arrCollection = [arr1, arr2, arr3, arr4];
      
      // if array sizes are variable.
      // if not max = arrCollection[0].length will do
      var max = Math.max.apply(Math, arrCollection.map(function(a) {
        return a.length;
      }));
      
      var arrFinal = [];
      
      for (let i = 0; i < max; i++) {
        var arr = [];
        arrCollection.forEach(function(a) {
          arr.push(a[i]);
        });
        arrFinal.push(arr);
      }
      
      console.log(arrFinal);

      【讨论】:

        【解决方案4】:

        您可以使用两个 forEach() 循环来创建它。

        var arr1 = [[1, 2], [3, 4], [5, 6]];
        var arr2 = [[1, 2, 3], [4, 5, 6], [7, 8], [9, 10, 12, 14]];
        
        let merge = function(arr) {
          var result = [];
          arr.forEach(function(e, i) {
            e.forEach(function(a, j) {
              if (!result[j]) result[j] = [a];
              else result[j].push(a)
            })
          });
        
          return result;
        }
        
        console.log(JSON.stringify(merge(arr1)))
        console.log(JSON.stringify(merge(arr2)))

        【讨论】:

          猜你喜欢
          • 2021-10-21
          • 1970-01-01
          • 2020-10-11
          • 2018-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多