推送正在覆盖数组中的先前数据 [英] Push is overwriting previous data in array

查看:42
本文介绍了推送正在覆盖数组中的先前数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将一个类似于"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 Objects 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆