關於js拷貝對象的問題

來源:互聯網
上載者:User

標籤:parse   不用   alt   使用   各路   src   對象   str   結果   

在使用vue的時候遇到一個需求需要備份一個多維陣列對象,用了好幾種方法得到的結果都是相互連帶影響的,無法做到在修改原數組的基礎上,copy出一份為改動過的原資料,看了下網上各路大仙的套路,還是不能深信,還是自己動手看看最好了。

首先是例子1,假如是一個單純簡單的數組對象:

// ------------情況1------------    var arr = [0,1,2,3];        var arr1 = arr;    var arr2 = arr.slice(0);    var arr3 = JSON.parse(JSON.stringify(arr));    arr.push(4);    console.log(arr1);    console.log(arr2);    console.log(arr3);

結果是這樣:

可以看到後兩者很好的滿足了我們的需求,沒有收到影響。

然後是例子2,這是一個相對複雜的多維對象。

 1 // ------------情況2------------ 2     var obj = [ 3         { a:‘0‘}, 4         { b:‘1‘}, 5         { c:‘2‘}, 6         {  7             d:[ 8                 { e:‘3‘}, 9                 { f:‘4‘},10                 { g:‘5‘},11             ]12         },13     ];14     var copy1 = obj;15     var copy2 = obj.slice(0);16     var copy3 = JSON.parse(JSON.stringify(obj));17 18     obj[3].d[2][‘h‘] = ‘6‘;19     console.log(copy1);20     console.log(copy2);21     console.log(copy3);

結果

結果就有不同了,發現前兩種方式都發生了改變,這是因為slice(),contact() 這類類似的方法只能對簡單的數組對象進行拷貝,如果其中包含對象,就無法隨人願了,還是第三種堅挺;

因為,就js來說不管是array對象,json對象,其本身是參考型別,是指向其地址的,運用JSON解析成非參考型別的字串變數,再反解析回來,所以結果令人滿意,當然如果是像

php這種擁有&引用符號的,那就不用擔心這個問題了。

關於js拷貝對象的問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.