【问题标题】:Javascript, creating array of hashes writes same hashJavascript,创建哈希数组写入相同的哈希
【发布时间】:2017-12-28 21:09:05
【问题描述】:

我正在尝试在 javascript 中创建一个哈希数组。例如;

[{id: "1", demo: 1, demo2: 2, demo3: 3}, {id: "2", demo: 1, demo2: 2, demo3: 3}, {id: "3", demo: 1, demo2: 2, demo3: 3}..]

我已经从 2 个 for 循环开始循环,但是因为哈希变量名称在循环期间它写入前一个循环期间是相同的,而不是将其推送到数组;

  var rows = [];
  var exc_hash = {};
  for (k = 0; k < 2; k++) {

    for (m = 1; m < 4; m++) {
      var exc = ((data[m][k][1][2] == 'OK') ? data[m][k][1][0] : data[m][k][1][2]);  

      exc_hash["id"] = data[0][k];
      exc_hash[(data[m][k][7])] = exc;

    }

    rows.push(exc_hash);
  }
  console.log(rows);

当我控制台记录行时,它会打印;

[{id: "1", demo: 1, demo2: 2, demo3: 3}, {id: "1", demo: 1, demo2: 2, demo3: 3}]

最后一个哈希值也和第一个哈希值一样。

编辑:

谢谢你,但是当我像你展示的那样使用它时;

 var rows = [];
  for (k = 0; k < 2; k++) { 
    for (m = 1; m < 4; m++) {
      var exc_hash = {
        id: k
      };

      exc_hash['data'+m] =  'data'+m+k;
      rows.push(exc_hash);
    } 
  }
  console.log(rows);

打印出来;

0:{id: 0, data1: "data10"}
1:{id: 0, data2: "data20"}
2:{id: 0, data3: "data30"}
3:{id: 1, data1: "data11"}
4:{id: 1, data2: "data21"}
5:{id: 1, data3: "data31"}

但是,我想得到这个;

0:{id: 0, data1: "data10", data2: "data20", data3: "data30"}
1:{id: 1, data1: "data11", data2: "data21", data3: "data31"}

我怎样才能做到这一点?

【问题讨论】:

标签: javascript


【解决方案1】:

这是一个相当经典的问题。您在循环的每次迭代中回收相同的对象,因此您将完全相同的对象插入到数组中。

要解决此问题,请在内部声明:

var rows = [];
for (k = 0; k < 2; k++) {
  for (m = 1; m < 4; m++) {
    var exc_hash = {
      id: data[0][k]
    };

    exc_hash[(data[m][k][7])] = ((data[m][k][1][2] == 'OK') ? data[m][k][1][0] : data[m][k][1][2]);

    rows.push(exc_hash);
  }
}

console.log(rows);

【讨论】:

    猜你喜欢
    • 2011-04-20
    • 1970-01-01
    • 2022-01-08
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2015-10-06
    相关资源
    最近更新 更多