相关疑难解决方法(0)

Push正在覆盖数组中的先前数据

我将一个类似于"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 = …
Run Code Online (Sandbox Code Playgroud)

javascript

29
推荐指数
2
解决办法
4万
查看次数

推入数组后变量值发生变化

因此,我正在测试此代码的小安全性:

<script>
  var newData = {}, graphs = []
  for(var j=0; j<2; j++){
    newData["name"] = 'value '+ j
    console.log(newData["name"]);
    graphs.push(newData);
    console.log(graphs);
  }
</script>
Run Code Online (Sandbox Code Playgroud)

我在网络控制台中获得了以下输出:

value 0 
Array [ Object ] 
value 1 
Array [ Object, Object ]
Run Code Online (Sandbox Code Playgroud)

数组中的所有对象具有完全相同的值:

name:"value 1"
Run Code Online (Sandbox Code Playgroud)

我真的为此感到挣扎,因为我不更改任何值,并且名称仍在同一循环中更改。

预先感谢您的回答!

javascript arrays

1
推荐指数
1
解决办法
4036
查看次数

为什么.push()方法重复它添加到数组的最后一个元素的值?

const maxObj = [{"BTCH#BD":57887,"BTYPEBD":"OCO"},
                {"BTCH#BD":57887,"BTYPEBD":"OCO"},
                {"BTCH#BD":57890,"BTYPEBD":"OTH"}]
const req = "4976809";


const result = [];
const temp = { reqId: req, batch: null };

for (var x = 0; x < maxObj.length; x++) {
    temp.batch = maxObj[x];

    result.push(temp);
}

console.log(JSON.stringify(result));
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我试图遍历一个对象数组,并将每个对象分配给临时模板对象的属性,然后我将其推送到结果数组.我的预期输出是这样的:

[{"reqId":"4976809","batch":{"BTCH#BD":57887,"BTYPEBD":"OCO"}},
 {"reqId":"4976809","batch":{"BTCH#BD":57887,"BTYPEBD":"OCO"}},
 {"reqId":"4976809","batch":{"BTCH#BD":57890,"BTYPEBD":"OTH"}}]
Run Code Online (Sandbox Code Playgroud)

但我的实际输出是这样的:

[{"reqId":"4976809","batch":{"BTCH#BD":57890,"BTYPEBD":"OTH"}}, 
 {"reqId":"4976809","batch":{"BTCH#BD":57890,"BTYPEBD":"OTH"}}, 
 {"reqId":"4976809","batch":{"BTCH#BD":57890,"BTYPEBD":"OTH"}}]
Run Code Online (Sandbox Code Playgroud)

我如何解决这个问题,以便获得上面的预期输出?

javascript

0
推荐指数
1
解决办法
55
查看次数

标签 统计

javascript ×3

arrays ×1