【问题标题】:Re-create an array from 2 dimensional array从二维数组重新创建数组
【发布时间】:2026-01-09 20:20:03
【问题描述】:

这是我目前的问题。假设我在一个数组中有一些数组,如下所示:

array[
    array["3", 20160502, "0"],
    array["5", 20160503, "1"],
    array["1", 20160504, "0"],
    array["8", 20160504, "2"],
    array["30", 20160506, "2"],
    array["23", 20160506, "1"],
    array["34", 20160506, "0"],
]

第 0 个元素是总计数,第 1 个元素是日期,第 2 个元素是状态(0 或 1 或 2)。 我想重新排列上面的数组并创建一个新数组,如下所示:

array[
    array[20160502, "3", "0", "0"],
    array[20160503, "0", "5", "0"],
    array[20160504, "1", "0", "8"],
    array[20160506, "34", "23", "30"]
]

有人知道吗? 非常感谢您。

【问题讨论】:

  • 第二个数组的元素是什么?

标签: javascript arrays multidimensional-array


【解决方案1】:

您可以使用Array#forEach() 和一个对象作为所需组的哈希表。

var array = [["3", 20160502, "0"], ["5", 20160503, "1"], ["1", 20160504, "0"], ["8", 20160504, "2"], ["30", 20160506, "2"], ["23", 20160506, "1"], ["34", 20160506, "0"]],
    grouped = []

array.forEach(function (a) {
    if (!this[a[1]]) {
        this[a[1]] = [a[1], '0', '0', '0'];
        grouped.push(this[a[1]]);
    }
    this[a[1]][1 + +a[2]] = a[0];
}, Object.create(null));

console.log(grouped);

【讨论】:

  • 非常感谢!您的解决方案适用于我的情况。
【解决方案2】:

您可以使用map重新排序:

var orig = [
    ["3", 20160502, "0"],
    ["5", 20160503, "1"],
    ["1", 20160504, "0"],
    ["8", 20160504, "2"],
    ["30", 20160506, "2"],
    ["23", 20160506, "1"],
    ["34", 20160506, "0"]
]
  
var reordered = orig.map(function(element) {
    return [element[1], element[0], element[2]];
})

console.log(reordered);

【讨论】:

  • 非常感谢。我现在就试试你的解决方案:)
【解决方案3】:

试试这个:-

var data = new Array(
    Array("3", 20160502, "0"),
    Array("5", 20160503, "1"),
    Array("1", 20160504, "0"),
    Array("8", 20160504, "2")
 );
 for(i in data){
     [x,y,z] = data[i];
     [x,y,z] = [y,z,x];
     data[i]=[x,y,z];
}

【讨论】:

    【解决方案4】:

    您可以通过forEach 做到这一点

    var array = [["3", 20160502, "0"],["5", 20160503, "1"],["1", 20160504, "0"],["8", 20160504, "2"],["30", 20160506, "2"],["23", 20160506, "1"],["34", 20160506, "0"],
    ], result = [];
    
    array.forEach(function(e) {
      if (!this[e[1]]) {
        this[e[1]] = [e[1], 0, 0, 0];
        result.push(this[e[1]]);
      }
      if(e[2] == 0) {
        this[e[1]][1] = Number(e[0]);
      } else if(e[2] == 1) {
        this[e[1]][2] = Number(e[0]);
      } else if(e[2] == 2) {
        this[e[1]][3] = Number(e[0]);
      }
    }, {})
    
    console.log(result)

    【讨论】:

      【解决方案5】:

      使用 ES6,您可以执行以下操作:

      for(let i of arr)
        arr[i][a,b,c] = arr[i][c,b,a];
      

      【讨论】:

      • 更好的块范围 ilet
      • true @MarcDix,错字