深淺拷貝與陣列去重

2021-10-04 05:20:59 字數 1796 閱讀 2678

我們來了解一下深淺拷貝與陣列去重(逆戰班)

什麼是深淺拷貝?

1.淺拷貝:將原物件或原陣列的引用直接賦給新物件,新陣列,新物件/陣列只是原來物件/陣列的乙個引用

宣告乙個變數arr1,此時,arr1中儲存的是陣列的記憶體位址,然後,將arr1中儲存的記憶體位址,賦值給變數arr2,這個時候,兩個變數中儲存的是同乙個位址,在控制台輸出arr2

通過索引下標,改變arr1陣列中第二個單元為「逆戰班」,此時在控制台輸出arr1與arr2

結果可見,對arr1中的陣列進行操作,arr2中的陣列也會改變,因為兩者儲存的是同乙個記憶體位址,進行操作的其實是同一組資料。同理,對arr2中的陣列進行操作,arr1中的陣列也會改變

2.深拷貝:建立乙個新的物件和陣列,將原物件的各項屬性的「值(陣列的所有單元)拷貝過來,是「值」而不是「引用」

宣告乙個變數arr1,此時,arr1中儲存的是陣列的記憶體位址,然後,宣告乙個變數arr2,為乙個空陣列,利用foreach,獲取arr1中的陣列中所有的單元,賦值到arr2的空陣列中,在控制台輸出arr2

通過索引下標,改變arr1陣列中第三個單元為「逆戰班」,此時在控制台輸出arr1與arr2

結果可見,對arr1中的陣列進行操作,arr2中的陣列不會改變,因為arr2儲存的是乙個新的位址,兩個變數之間沒有關係了

陣列中,如果存在重複的數值,我們可以對它進行陣列去重操作,例如

var arr = [1,1,1,2,2,3,3,3,3,4,4,5,5,5]

去重後,就是[1,2,3,4,5]

去重的方法很多,接下來要介紹的是indexof方法。變數.indexof(),是查詢陣列或者字串中是否有某個數值或者某個字母,如果有這個資料,返回值是這個資料的索引下標,如果沒有這個資料,返回值是 -1。上**

宣告乙個變數arr1,在宣告乙個變數arr2,如圖,利用foreach,獲取arr1中的陣列中所有的單元,賦值到arr2的空陣列中,在賦值迴圈過程中,執行if判斷,如果arr2空陣列中沒有這個資料,就新增,如果有,繼續賦值迴圈,直至迴圈結束,在控制台輸出arr2

即為去重之後的新陣列

陣列深拷貝 物件的深拷貝 陣列去重

1 for 迴圈實現陣列的深拷貝 var arr 1,2,3,4,5,6 var arr2 copyarr arr function copyarr arr var obj2 copyobj obj function copyobj obj for var key in obj return res...

陣列去重與排序

陣列去重 方法一 es6 set方法去重 function unique arr 方法二 indexof function unique arr return result 方法三 使用filter function unique arr 方法四 同樣是set方法但是簡化 new set arr 陣...

陣列「去重」與「排序」

樣例輸入 10 20 40 32 67 40 20 89 300 400 15 樣例輸出 8 15 20 32 40 67 89 400 用到了三種解決方法 1.桶排序 先去重後排序 2.快速排序 先排序後去重 3.c stl庫中的sort和unique函式 直接排序和去重。include incl...