javascript推送重复值

时间:2013-01-31 08:22:13

标签: javascript arrays

我有一个输入行需要扩展才能创建多行,每行重复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;
}

1 个答案:

答案 0 :(得分:3)

  

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

是的,他们这样做,他们这样做是因为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中还有其他字段,那么您还需要在对象字面值中包含这些字段。