1. 程式人生 > 實用技巧 >js陣列賦值,改變其中一個,另一個數組也會改變(vue中資料繫結)

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資料賦值