深拷貝與淺拷貝-通俗易懂

哈嘍,寶寶們~

最近項目不是很緊張,姐妹兒就給大家多分享一下有用的東西,今天跟大家說說深拷貝與淺拷貝的區(qū)別?。?!
情景描述
情景描述.png
  • tableData 數(shù)據(jù)是列表中顯示的數(shù)據(jù),options 為添加菜單彈框中上級菜單的數(shù)據(jù)信息;
  • 現(xiàn)在要將 tableData 中的數(shù)據(jù)賦值給 options,并且在 options 中添加一條數(shù)據(jù)時不能影響 tableData 的改變;
一、淺拷貝

普通的變量賦值一般都是淺拷貝

// 添加菜單按鈕
    creat() {
      // 打開添加菜單窗體
      this.dialogFormVisible = true
      this.dailogTitle = '添加菜單'
      // this.$nextTick()這就是我上一篇講到的:http://www.itdecent.cn/p/1cc770b13058
      this.$nextTick(() => {
        this.form = {}
        this.$refs.ruleForm.resetFields()
      })

      console.log('賦值之前的options,tableData', this.options, this.tableData) // 沒賦值之前的 tableData

      淺拷貝
      this.options = this.tableData;
      this.options.unshift(this.NoParent) // 要往this.options里向前添加一個數(shù)據(jù)unshift()
      console.log('淺拷貝之后的options',this.options,'淺拷貝之后的tableData',this.tableData)
    },
淺拷貝后的數(shù)組數(shù)據(jù)變化.png
  • 通過以上的代碼以及圖片的展示,可以很明顯看出 options 通過賦值后向前添加了一個“無”的數(shù)據(jù),此時 tableData 中的數(shù)據(jù)也同樣添加了一個“無”的數(shù)據(jù),tableData 也受到了options 變化的影響?。?!
  • 此時對 options 來說就是淺拷貝~~~

那么如何做到不影響原數(shù)據(jù)信息呢,接下來我們來看深拷貝

二、深拷貝

淺拷貝是你,深拷貝就是另外一個你,和你沒有任何關(guān)系,除了一摸一樣外~~~

// 添加菜單按鈕
    creat() {
      // 打開添加菜單窗體
      this.dialogFormVisible = true
      this.dailogTitle = '添加菜單'
      // this.$nextTick()這就是我上一篇講到的:http://www.itdecent.cn/p/1cc770b13058
      this.$nextTick(() => {
        this.form = {}
        this.$refs.ruleForm.resetFields()
      })

      console.log('賦值之前的options,tableData', this.options, this.tableData) // 沒賦值之前的 tableData

      // 深拷貝
      this.options = JSON.parse(JSON.stringify(this.tableData))
      this.options.unshift(this.NoParent)
      console.log('深拷貝之后的options', this.options, '深拷貝之后的tableData', this.tableData)
    },
深拷貝之后的數(shù)組數(shù)據(jù)變化.png
  • 通過以上的代碼以及圖片的展示,可以很明顯看出 options 通過賦值后向前添加了一個“無”的數(shù)據(jù),此時 tableData 中的數(shù)據(jù)并沒有受到options 變化的影響?。?!
  • 此時對 options 來說就是深拷貝~~~

  • 這樣的話,你怎么處理 options 都不會影響到原 tableData 數(shù)據(jù)結(jié)構(gòu)!
好了,小伙伴兒們,今天姐妹兒就給大家分享到這里啦,希望可以幫助到大家?。。?/h6>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,674評論 1 32
  • 深拷貝和淺拷貝(Shallow copy 和 Deep copy) 一.概念定義 對象復(fù)制有兩種:淺拷貝和深拷貝。...
    鐵頭娃_e245閱讀 985評論 0 3
  • 什么是深拷貝,什么是淺拷貝 說到深淺拷貝,就不得不提到另外一個知識點,那就是引用類型和基本類型以及堆和棧的區(qū)別。再...
    jeff_nz閱讀 986評論 0 0
  • 在iOS開發(fā)中深拷貝和淺拷貝是一個被大家說爛的話題了,但是今天還是要拿出來說一說。原因是,前段時間在微信朋友圈看到...
    WSJay閱讀 974評論 1 8
  • 2017-12-20 星期三 轉(zhuǎn)眼就到了星期三,產(chǎn)生于星期一的靈感想了很久不知道要怎么下筆來寫。其實最近一直在想這...
    學(xué)晶閱讀 484評論 0 0

友情鏈接更多精彩內(nèi)容