js赋值后,改变现有数据会修改原来的数据的解决办法

a_json = {"数组":"1","字典":"2"}

tmp_json = {}

b_list = []

for(var key in a_json){

tmp_json['val'] = a_json[key]

tmp_json['name'] = key

//先把json对象转成字符串,再转成json格式,即可实现,json对象修改但是b_list的值不变的情况

b_list.push(JSON.parse(JSON.stringfy(tmp_json)))

//这种输出如下

console.log(b_list) //b_list=[ {"name":"数组","val":"1"},"name":"字典","val":"2"}]

//直接赋值tmp_json

b_list.push(tmp_json)

//这种输出如下,tmp_json的值变化,会导致b_list的值变化。原因:直接传tmp_json是浅拷贝的形式,给的是tmp_json在内存上的地址,地址上的内容一旦发生变化,则指向的内容也变化。因此需要进行转化为字符串,这样可以进行深拷贝,从新开辟一个物理空间给到tmp_json

console.log(b_list) //b_list=[ {"name":"字典","val":"2"},"name":"字典","val":"2"}]

}

参考文章:https://blog.csdn.net/u011295864/article/details/88943710

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值