js 改变数组中某个字符串的值_JS数组中的一个元素的值改变后,数组其它元素值都跟着变了...

今天写代码时候想自己写点假数据,然后将一个数组的一项各种循环添加,因为想每条数据多少有点区别,所以单独把某些数据push完后单独改变某些值,结果发现,数组其它元素值都跟着变了。初次发现这个问题真的很诡异,一头雾水,超出了认知,自己尝试各种demo找了很久才找到根源,最后发现,还是在认知之内,只不过换了一种玩法,大脑短路了,如下示例代码

示例代码

1
2
3
4
5
6
7
8
9
10
11
var d = [{
    a: 1},{
    a: 2}];
d.push(d[0]);
d[2].a = 100;
console.log(d);

上述代码你能想象下结果应该是多少么?正常情况我们可能想到或者说想得到的结果是:

1[[{a:1},{a:2},{a:100}]]

而实际让我来告诉你,结果是:

1[{a:100},{a:2},{a:100}]

不知道你这时候会不会感觉诧异呢?

解决方式

1
2
3
4
5
6
7
8
9
10
11
12
13
var d = [{
    a: 1},{
    a: 2}];
d.push(d[0]);var arryNew = JSON.parse(JSON.stringify(d));
arryNew[2].a = 100;
this.d = arryNew;
console.log(d);

4971d4a630be52cbf339bf2a6192b41f.png

小结

这个问题其实还是基础问题,只是之前没这么玩过,一时诧异的很。归根究底就是因为数组是引用类型,你从原数组抠出来的对象然后通过push复制插入到原数组中,那么这两个对象指向的是同一个地址,所以改变其中一个就会改变另一个

28d8120135cd055c741339a8c7c979bf.png 5c724fc5e907cef4ccc7b715d948085d.png微信号:gh_dcd05cdf3c3e扫码关注我们,获取最新资讯
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值