目前我遇到了JavaScript数组的问题,如果我更新数组中的值,它会更新两个数组中的值。
我当前的数组看起来像这样
billarr[camp][e].dataa = t;
例如,如果您尝试更新数组,如
billarr[22][1].dataa = "blabla";
它更新了
中的dataa值billarr[22]
和
billarr[23]
到dataa var是“blabla”
我花了几个小时看看可能的解决方案是什么,如果有人有任何建议我很绝望
数组人口代码
message ={};
temparr4 =[];
message.typee= $("#type"+data[i].id).val();
message.events= $("#event"+data[i].id).val();
message.network=data[i].network;
message.network_des=data[i].network_des;
message.dataa=data[i].data;
temparr4[data[i].id]=message;
然后循环(设置默认数组内容)
camparr.forEach(function(i,e) {
billarr[e] = temparr4;
});
不使用对象仍然具有相同的阵列更新问题。
message = []; temparr4 = [];
message[0]= $("#type"+data[i].id).val();
message[1]= $("#event"+data[i].id).val();
message[2]=data[i].network;
message[3]=data[i].network_des;
message[4]=data[i].data;
temparr4[data[i].id]=message;
然后循环(设置默认数组内容)
camparr.forEach(function(i,e) {
billarr[e] = temparr4;
});
这仍然更新了阵列billarr [22]和billarr [23]
billarr[camp][e][4] = t;
我使用没有对象和数组的代码进行更新但是数组与对象相同并更新特定元素的两个数组
答案 0 :(得分:3)
您正在错误地构建数组,并将相同的对象存储在数组中的两个位置,而不是存储两个单独的对象。
您还没有向我们展示足够的代码来帮助您,但这是一个例子:
// An array
var a = [];
// An object
var o = {data: "foo"};
// Putting that object in the array
a.push(o);
// Putting it in again -- this results in the *same* object being in the array twice
a.push(o);
// If we change object...
a[0].data = "bar";
// ...it's the *object* that gets changed, so it doesn't matter which
// reference we use when looking at it:
console.log(a[0].data); // "bar"
console.log(a[1].data); // "bar"
console.log(o.data); // "bar"
解决方案是在将旧的对象推送到数组后创建 new 对象
// An array
var a = [];
// An object
var o = {data: "foo"};
// Putting that object in the array
a.push(o);
// Creating a *new* object
o = {data: "testing"};
// Pushing the new object in the array
a.push(o);
// If we change object...
a[0].data = "bar";
// ...the other object isn't changed:
console.log(a[0].data); // "bar"
console.log(a[1].data); // "testing"