当前位置: 首页 > 面试题库 >

推送正在覆盖数组中的先前数据

百里涛
2023-03-14
问题内容

我正在将一个类似于“ 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);
    }

}

问题答案:

调用push不会复制您的对象,因为JavaScript Object是通过引用传递的:您要对Object每个数组条目进行相同的操作。

您可以通过在循环主体var UserDataEntry = {}; 内部 移动轻松地解决此问题,以便在每次循环迭代时创建一个新对象:

    for (var x = 0; x < (tempUserData.length); x++) {
         var UserDataEntry = {};


 类似资料:
  • 我正在尝试使用fscanf加载一些结构数组的默认值,这看起来像 数据按如下方式存储在文本文件中(使用不同的值重复多次): 我用fscanf/fscanf_s(尝试两者)读取的值如下: 然而,VS2012在最后抛出了一个异常,称列表已损坏。调试显示,在阅读了上述示例文本的前四行后,结构的“map”部分包含以下内容 其中X是未初始化的值。 似乎fscanf正在试图“null terminate”我的整

  • 本文向大家介绍如何在MongoDB中推送数组?,包括了如何在MongoDB中推送数组?的使用技巧和注意事项,需要的朋友参考一下 要推送数组,请在MongoDB中使用$push。首先让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是推送数组的查询- 这将产生以下输出-

  • 问题内容: 我有一个示例数组,用于将条目插入到YUI数据表中 我可以通过这样做获得相同的阵列吗? 我在这里尝试的是编写一个通用方法,该方法将遍历结果列表并在将来能够形成一个条目。 所以我怎样才能使数组与本书代码的第一部分相同? 添加了我的整个示例代码,带注释的书本数组似乎可以工作,但未注释的部分似乎无法显示行 问题答案: 我尝试并找到了解决方案,因为在我按入后,att和值将成为对象 这将使其显示在

  • 问题内容: 我正在写入txt文件,但是每次我执行写入过程时,它都会覆盖那里已经写入的内容。如何更改代码,使程序的这一部分不会覆盖已经存在的内容? 问题答案: 将true作为第二个参数传递给FileWriter以打开“附加”模式。

  • 我有一个像这样的mongoDB结果。 我需要排序降序。 下面是返回上述结果的查询。我在各个阶段都尝试过使用sort,但没有成功。 需要插入排序操作的地方,按计数降序排序。

  • 问题内容: 在Java中是否可以覆盖Objects数组的toString? 例如,假设我创建了一个简单的类(由于这是一个普遍的问题,所以实际上是哪个类并不重要)。客户端一旦创建了一个数组并使用了它,是否有可能不打印该数组的地址,而是打印一个定制的? PS:当然,我不能只在类中重写它,因为它与单个实例有关。 问题答案: 不会。您当然可以创建一个静态方法User.toString(User []),但