为什么我只改了JS数组中的一个对象的元素的值,其他对象的元素值都跟着变了

转发:https://blog.csdn.net/zhangxiwen_/article/details/90178819
为什么我只改了JS数组中的一个对象的元素的值,其他对象的元素值都跟着变了
原创koko8566 最后发布于2019-05-13 19:14:47 阅读数 1045 收藏
展开
今天写了一段比较繁杂的多重循环 , 其中第一层循环是为了给数组中的对象元素赋值 ,代码如下:

$.each(dataList, function(i,arr){
       let payArr = [];
       data.forEach(v=>{ 
            for (var key in arr){
                if('pay'+v.payNo == key&&arr[key]!= null &&arr[key]!== '0.00'){
                	v.payAmount = arr[key];
                	payArr.push(v);
                }
            }
       });
       dataList[i].payArr = payArr ; //出现错误的点在这儿
});

我把组装起来的一个数组赋值给第一层循环的数组中的对象 , 我明明做的是循环赋值 , 但是每次赋值完之后 ,dataList 里所有对象元素的payArr都会一起变 , 变成同一个 , 在下不才整整花了近三个小时在这个问题上面 , 一开始想过是不是变量定位的位置不对 ,或者是循环方式有问题 ,所有换遍了 forEach 和 $.each 和for , 终于还是没有解决 ,后面看到一位博主给出思路 , 由于数组是引用变量 ,进行引用赋值 , 其实还是原来的数组 , 也就是说 ,我循环赋给dataList里的payArr其实一直都是同一个地址里存的同一个数组 , 所以 ,最后一次修改payArr 后 ,每个引用都一起改掉了 , 那么怎么解决呢 ?

dataList[i].payArr = JSON.parse(JSON.stringify(payArr)) ;
原理就是先把数组转换成字符串再转换成对象 ,这样会新分配一块内存新创建一个对象 ,问题解决 ,这是一个基础坑, 填上了,希望会对和我遇到同样问题的各位有用.
————————————————
版权声明:本文为CSDN博主「koko8566」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhangxiwen_/article/details/90178819

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值