我将一个类似于"John.Doe.100.Newbie-David.Miller.250.Veteran-"的字符串传递给SplitDatabase函数,该函数适当地拆分字符串并将值分配给UserDataEntry对象.然后将UserDataEntry对象推入到应该存储所有用户数据的全局UserData数组中.
但由于某种原因,UserData.push(UserDataEntry)部分似乎覆盖了UserData数组中的先前数据.第一个循环中的警报在循环时显示正确的数据,但在底部的第二个循环中的警报只是一遍又一遍地显示最后一个记录.
我不确定为什么会这样?
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);
}
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*lin 65
调用push
不会复制您的对象,因为JavaScript Object
是通过引用传递的:您正在推送与Object
每个数组条目相同的内容.
您可以通过移动循环体var UserDataEntry = {};
内部来轻松解决此问题,以便在每次循环迭代时创建一个新对象:
for (var x = 0; x < (tempUserData.length); x++) {
var UserDataEntry = {};
Run Code Online (Sandbox Code Playgroud)
把你的线var UserDataEntry = {}
放在for循环中.
现在,您只有一个对象,并且您将数组的每个部分都设置为该对象.您覆盖循环中的成员.
如果在循环内创建新对象,则会将所有新成员添加到数组中.
归档时间: |
|
查看次数: |
35472 次 |
最近记录: |