js陣列賦值,改變其中一個,另一個數組也會改變(vue中資料繫結)
阿新 • • 發佈:2020-09-04
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資料賦值