我有一个输入行需要扩展才能创建多行,每行重复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;
}
答案 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
中还有其他字段,那么您还需要在对象字面值中包含这些字段。