zoukankan      html  css  js  c++  java
  • js数组赋值,改变其中一个,另一个数组也会改变(vue中数据绑定)

    1,问题背景和原因

    在vue中,我在data定义了变量,接后台数据,数组中存的是对象,具体数据类型如下:

    data () {
        return {
          selectAssetList: {
            applyTemplateDetailList: []
          },
          applyTemplate: {
            templateName: '',
            status: 'in_use',
            applyTemplateDetailList: []
          }
        }
      }

    之后我对两个数组分别赋值,如下:

    this.selectAssetList.applyTemplateDetailList = resp.data
    this.applyTemplate.applyTemplateDetailList = resp.data

    当其中一个数组对象的某一个属性改变时,另一个也会改变

    我们都知道,数组所指向的是内存地址,直接赋值会使它们指向同一地址。(深拷贝和浅拷贝)

    2,一般解决办法

    this.selectAssetList.applyTemplateDetailList = [...resp.data]
    this.applyTemplate.applyTemplateDetailList = [...resp.data]

    显然这种办法是不能解决我的问题,原因是当这个数组没有嵌套对象和其他数据时,这种方法是可以的

    (形如:applyTemplateDetailList: []   赋值:this.applyTemplateDetailList = [...resp.data]

    3,最终解决办法

    this.selectAssetList.applyTemplateDetailList = JSON.parse(JSON.stringify(resp.data))
    this.applyTemplate.applyTemplateDetailList = JSON.parse(JSON.stringify(resp.data))

    把要赋值的数据转成json字符串,然后再转成json数据赋值

     

     

    心有所想,必有回响
  • 相关阅读:
    Linux下的输入/输出重定向
    strcpy与strncpy的区别
    C++的函数重载
    gtest 学习二
    gtest 学习一
    char* wchar* char wchar转换
    iconv 编译不通过问题
    嵌入式常用库
    驱动编程class_create说明
    libiconv 交叉编译
  • 原文地址:https://www.cnblogs.com/zhulei2/p/13613059.html
Copyright © 2011-2022 走看看