推送正在覆盖数组中的先前数据 [英] Push is overwriting previous data in array
问题描述
我正在将一个类似于"John.Doe.100.Newbie-David.Miller.250.Veteran-"的字符串传递给SplitDatabase函数,该函数将适当地拆分字符串并将值分配给UserDataEntry对象.然后将UserDataEntry对象推入应该存储所有用户数据的全局UserData数组中.
I'm passing a string which looks something like: "John.Doe.100.Newbie-David.Miller.250.Veteran-" to the SplitDatabase function which splits the string appropriately and assigns the values to the UserDataEntry object. The UserDataEntry object is then pushed in to the global UserData array which is supposed to store all the user data.
但是由于某种原因,UserData.push(UserDataEntry)部分似乎正在覆盖UserData数组中的先前数据.第一个循环中的警报在循环时显示正确的数据,但第二个循环中的警报在底部仅一次又一次显示最后一条记录.
For some reason though, the UserData.push(UserDataEntry) part seems to be overwriting previous data in the UserData array. The alert in the 1st loop shows the correct data as it loops, but alert in the second loop at the bottom just shows the last record over and over again.
我不确定为什么会这样吗?
I'm not sure why this is?
var UserData = [];
function SplitDatabase(result) {
var RawUsers = result.split('-');
var UserDataEntry = {};
for (var i = 0; i < (RawUsers.length - 1); i++) {
var tempUserData = RawUsers[i].split('.');
for (var x = 0; x < (tempUserData.length); x++) {
switch (x) {
case 0:
UserDataEntry.firstname = tempUserData[x];
break;
case 1:
UserDataEntry.lastname = tempUserData[x];
break;
case 2:
UserDataEntry.points = tempUserData[x];
break;
case 3:
UserDataEntry.rank = tempUserData[x];
UserData.push(UserDataEntry);
alert(UserData[i].firstname);
break;
}
}
}
for (var i = 0; i < (UserData.length); i++) {
alert(UserData[i].firstname);
}
}
推荐答案
调用push
不会复制您的对象,因为JavaScript Object
是通过引用传递的:您要为每个数组推送相同的Object
项.
Calling push
will not copy your object, because JavaScript Object
s are passed by reference: you're pushing the same Object
as every array entry.
您可以通过在循环体内移动var UserDataEntry = {};
来轻松解决此问题,以便在每次循环迭代中创建一个新对象:
You can fix this easily by moving the var UserDataEntry = {};
inside the loop body, so that a new object is created each loop iteration:
for (var x = 0; x < (tempUserData.length); x++) {
var UserDataEntry = {};
这篇关于推送正在覆盖数组中的先前数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!