[英]Javascript, creating array of hashes writes same hash
I'm trying to create an array of hashes in javascript.我正在尝试在 javascript 中创建一个哈希数组。 For instance;例如;
[{id: "1", demo: 1, demo2: 2, demo3: 3}, {id: "2", demo: 1, demo2: 2, demo3: 3}, {id: "3", demo: 1, demo2: 2, demo3: 3}..]
I have loop through from 2 for loops but because the hash variable name is the same during the loop it writes on the previous one, not pushing it to array;我从 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);
When I console log the rows, it prints;当我控制台记录行时,它会打印;
[{id: "1", demo: 1, demo2: 2, demo3: 3}, {id: "1", demo: 1, demo2: 2, demo3: 3}]
The last hash written as for the first hash as well.最后一个哈希也写成第一个哈希。
EDIT:编辑:
Thank you but when I use this like you show;谢谢,但是当我像你展示的那样使用它时;
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);
it prints;它打印;
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"}
However, I would like to get this;但是,我想得到这个;
0:{id: 0, data1: "data10", data2: "data20", data3: "data30"}
1:{id: 1, data1: "data11", data2: "data21", data3: "data31"}
How can I accomplish this?我怎样才能做到这一点?
This is a fairly classic problem.这是一个相当经典的问题。 You're recycling the same object through each iteration of the loop so you're inserting the exact same object into the array.您通过循环的每次迭代循环使用相同的对象,因此您将完全相同的对象插入到数组中。
To fix this, declare that internally:要解决此问题,请在内部声明:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.