js json动态改变属性时发现很奇怪的问题
答案:4 悬赏:0 手机版
解决时间 2021-04-04 09:59
- 提问者网友:浪荡绅士
- 2021-04-03 20:34
js json动态改变属性时发现很奇怪的问题
最佳答案
- 五星知识达人网友:蓝房子
- 2021-04-03 20:59
var array=[];
var resp={"a":[{"c":"cc"},{"c":"ccc"}],"b":[{"d":"dd"},{"d":"ddd"}]};
for(var i=0; i {
for(var j=0; j {
var json=resp.a[i];
json.d=resp.b[j].d;//从这里开始就错了。你json.d把resp.a[i].d也赋值了。
你对json的赋值不应该去影响到原有的数据resp。程序本身就是错误的。
array.push(json);
alert(JSON.stringify(array));
}
}正确的处理方式:
function shallowClone(obj){
var clone = {};
for(var p in obj){
if(obj.hasOwnProperty(p)){
clone[p] = obj[p];
}
}
return clone;
}
var array=[];
var resp={"a":[{"c":"cc"},{"c":"ccc"}],"b":[{"d":"dd"},{"d":"ddd"}]};
for(var i=0; i {
for(var j=0; j {
var json=shallowClone(resp.a[i]);
json.d=resp.b[j].d;
array.push(json);
alert(JSON.stringify(array));
}
}追问谢谢!
var resp={"a":[{"c":"cc"},{"c":"ccc"}],"b":[{"d":"dd"},{"d":"ddd"}]};
for(var i=0; i
for(var j=0; j
var json=resp.a[i];
json.d=resp.b[j].d;//从这里开始就错了。你json.d把resp.a[i].d也赋值了。
你对json的赋值不应该去影响到原有的数据resp。程序本身就是错误的。
array.push(json);
alert(JSON.stringify(array));
}
}正确的处理方式:
function shallowClone(obj){
var clone = {};
for(var p in obj){
if(obj.hasOwnProperty(p)){
clone[p] = obj[p];
}
}
return clone;
}
var array=[];
var resp={"a":[{"c":"cc"},{"c":"ccc"}],"b":[{"d":"dd"},{"d":"ddd"}]};
for(var i=0; i
for(var j=0; j
var json=shallowClone(resp.a[i]);
json.d=resp.b[j].d;
array.push(json);
alert(JSON.stringify(array));
}
}追问谢谢!
全部回答
- 1楼网友:风格不统一
- 2021-04-04 00:05
for (var i in resp) {
for (var j in resp[i]) {
console.log(resp[i][j]);
}
}追问您这样只是打出了resp里的值追答push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。
所以。是 push影响了。 push吧你添加的json作为单个元素添加到数组中了。所以就修改了array
for (var j in resp[i]) {
console.log(resp[i][j]);
}
}追问您这样只是打出了resp里的值追答push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。
所以。是 push影响了。 push吧你添加的json作为单个元素添加到数组中了。所以就修改了array
- 2楼网友:轮獄道
- 2021-04-03 22:56
你要的是不是这个:
因为js中对象引用传值,所以一直指向resp.a[i],
追问也谢谢您!
- 3楼网友:忘川信使
- 2021-04-03 21:59
修改
array.push(json);
为
array.push(JSON.parse(JSON.stringify(json)));
为毛会出现这种结果?
答:首先关键字是对象引用传递,
当i为0的时候,然后第二层循环j会执行2次,
var json=resp.a[0];
json.d=resp.b[0].d;
var json=resp.a[0];
json.d=resp.b[1].d;
其实第一次和第二次获得的json对象指向的是同一个东西,如果你用变量把两个json都保存下来的话,用 == 判断返回为true.
所以出现的现象是,array对象里 第0个 == 第1个, 第2个 == 第3个追问您的回答也能解决我的问题,思路很好,赞一个!
array.push(json);
为
array.push(JSON.parse(JSON.stringify(json)));
为毛会出现这种结果?
答:首先关键字是对象引用传递,
当i为0的时候,然后第二层循环j会执行2次,
var json=resp.a[0];
json.d=resp.b[0].d;
var json=resp.a[0];
json.d=resp.b[1].d;
其实第一次和第二次获得的json对象指向的是同一个东西,如果你用变量把两个json都保存下来的话,用 == 判断返回为true.
所以出现的现象是,array对象里 第0个 == 第1个, 第2个 == 第3个追问您的回答也能解决我的问题,思路很好,赞一个!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯