两个相同的数组 操作一组 另一组也出现相同的状况

问题

两个下拉框,两个下拉框的数据是内容完全相同的两个数组,操作其中一个数组,另一个数组也出现相同的现象

原因

JS中数组是引用类型,直接把一个引用类型变量arr复制给另一个变量arr2,并不会创建一个新的数组然后复制给arr2,而是只复制对数组的引用,也就是说arr和arr2指向同一个数组,所以对arr或arr2的操作会同时影响到另一个。

(对象使用的是引用赋值。当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在堆中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。)

解决方法

1、比较稳妥的方法

var arr = [1,2,3]

var arr1 = JSON.parse(JSON.stringify(arr))

arr.push(4)

arr1.push(5)

console.log(arr); //[ 1, 2, 3, 4 ]
console.log(arr1); //[ 1, 2, 3, 5 ]

2、

var arr = [1,2,3]

var arr1 = []

arr.map(v=>{
    arr1.push(v)
})

arr.push(4)

arr1.push(5)

console.log(arr);//[ 1, 2, 3, 4 ]
console.log(arr1);//[ 1, 2, 3, 5 ]

但是!!这种方法在数组里面项是对象的时候,item依然会相关联,可以说是藕断丝连,前端极易出现问题

var arr = [{name:'啊啊啊'},2,3]

var arr1 = []

arr.map(v=>{
    arr1.push(v)
})

arr.push(4)

arr1.push(5)

console.log(arr); //[ { name: '啊啊啊' }, 2, 3, 4 ]
console.log(arr1); //[ { name: '啊啊啊' }, 2, 3, 5 ]

arr[0].vocal='哼哼'

console.log(arr); //[ { name: '啊啊啊', vocal: '哼哼' }, 2, 3, 4 ]
console.log(arr2); //[ { name: '啊啊啊', vocal: '哼哼' }, 2, 3, 5 ]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值