1

我有一个输入行需要扩展以创建多行,每行重复 6 个字段,每行添加一个唯一字段。唯一字段存储在 arrparentjobs 数组中,我知道它们具有唯一值。

当代码运行时,结果行都包含完全相同的数据,这恰好是最后被推送的项目的值。

我在这里做错了什么?

非常感谢,乔

var dataRowsOutput = [];
arrVolDataOutput.playerid = volDataRow.playerId;
arrVolDataOutput.timestamp = volDataRow.timestamp;
arrVolDataOutput.playername = volDataRow.playerName;
arrVolDataOutput.parentname = volDataRow.parent1Name;
arrVolDataOutput.parentphone = volDataRow.parent1Phone;
arrVolDataOutput.parentemail = volDataRow.parent1Email;
for (var j = 0; j < arrparentjobs.length; ++j) {
  arrVolDataOutput.parentjob = arrparentjobs[j];
  dataRowsOutput.push(arrVolDataOutput);
  continue;
}
4

1 回答 1

6

结果行都包含完全相同的数据

是的,他们这样做了,他们这样做是因为push将引用(不是深拷贝甚至浅拷贝)推送到数组上,而您只是在一遍又一遍地parentjob将完全相同的对象推送到数组上时更改了引用。arrVolDataOutput

您需要在每次迭代时创建一个新对象,如下所示:

var dataRowsOutput = [];
for (var j = 0; j < arrparentjobs.length; ++j) {
  dataRowsOutput.push({
    parentjob:   arrparentjobs[j],
    playerid:    volDataRow.playerId,
    timestamp:   volDataRow.timestamp,
    playername:  volDataRow.playerName,
    parentname:  volDataRow.parent1Name,
    parentphone: volDataRow.parent1Phone,
    parentemail: volDataRow.parent1Email
  });
}

如果您的字段中还有其他字段,arrVolDataOutput那么您还需要在对象文字中包含这些字段。

于 2013-01-31T08:46:29.957 回答