vue里面接口获取的数组数据我赋给了两个变量,然后其中一个变量push添加了一个值,但是发现另一个变量也同时增加了

vue里面接口获取的数组数据我赋给了两个变量,然后其中一个变量通过push添加了一个值,但是发现另一个变量也同步发生变化,如下:

apiGetDeviceType().then(response => {
                    let data=response.data
                    this.deviceType1 =data
                    this.deviceType2 =data
                  
                    this.deviceType1.push({
                        name: '全部',
                        code: 'all'
                    })
                })

不知道为啥

阅读 4.7k
5 个回答

因为你的this.deviceType1和this.deviceType2都是指针指向response.data的,并不是独立的两个变量,而是两个一样的索引,所以你当你修改哪一个的属性,另一个也会跟着变。用json.parse(json.stringify(response.data))进行拷贝response.data就可以了

基础啊..少年

这里的data 是一个对象, 在js中是引用类型, 赋予的不是值,而是引用的地址

例如demo

let obj = {a: 1}    // 引用类型

let temp1 = obj
let temp2 = obj
// 此时temp1, 和temp2 都指向了obj, 但不代表分成两份

temp1.a = 2

console.log(temp1)    // {a: 2}
console.log(temp2)    // {a: 2}

当然为了实现 “分成两份” 可以参考 浅拷贝与深拷贝

这个跟vue没有关系,和JavaScript这门语言有关系吧,百度一下js赋值

和js的赋值有关,楼主这个例子里实际上都是在操作data

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题