陣列去重的方法

2022-06-30 22:15:11 字數 3299 閱讀 9091

一、雙重for

定義乙個新陣列,並存放原陣列的第0個元素,然後將元素組一一和新陣列的元素對比,若不同則存放在新陣列中。這裡面用到了標誌位的思想,先假設不重複var isrepeat = false,如果遇到重複的,就修改為isrepeat = true並且結束迴圈,迴圈結束後再判斷isrepeat的狀態從而決定是否放入新陣列。

1

function

unique (arr) 10}

11if (!isrepeat) 14}

15return

newarr16}

17 console.log(unique([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

二、排序 + 去重

先將原陣列排序(無論按數字大小排序還是ascii碼排序均可),再與相鄰的進行比較,如果不同則存入新陣列。

1

function

unique2 (arr) 8}

9return

newarr10}

11 console.log(unique2([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 12, 2, 3, 7]

三、利用物件

利用物件屬性名不重複的特性,將陣列元素作為物件屬性名來取值,如果沒有取到值則代表此元素是第一次被遍歷到也就是第一次出現,那就把他作為物件屬性名存乙個值並push進新陣列,下次如果再遍歷到相同的元素則if不成立,不再push。

1

function

unique3 (arr)

3var newarr =

4for (let i = 0; i < arr.length; i++) 9}

10return

newarr11}

12 console.log(unique3([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

四、indexof

利用陣列的indexof下標屬性來查詢。

1

function

unique4 (arr) 7}

8return

newarr9}

10 console.log(unique4([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

五、lastindexof

和方法四幾乎一致:

1

function

unique5 (arr) 7}

8return

newarr9}

10 console.log(unique5([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

六、includes

利用陣列原型物件上的includes方法。

1

function

unique6 (arr) 7}

8return

newarr9}

10 console.log(unique6([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

七、filter + includes

利用陣列原型物件上的 filter 和includes方法,如果newarr已存在該元素,filter裡就return false,否則就push並返回乙個true(我這裡返回的是push的返回值即陣列新的length)。

function

unique7 (arr) )

return

newarr

}console.log(unique7([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

八、foreach + includes

利用陣列原型物件上的 foreach 和 includes方法,和方法七幾乎相同。

1

function

unique8 (arr) )

6return

newarr7}

8 console.log(unique8([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

九、splice

利用陣列原型物件上的 splice 方法。當查詢到相同元素使用splice刪除,刪除之後需要j--,否則會跳過一次比較。

1

function

unique9 (arr) 8}

9}10return

arr11

}12 console.log(unique9([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

十、set

set資料結構是es6新增的一種資料結構,它類似於陣列,其成員的值都是唯一的,本身就不允許重複。我們可以把陣列轉換為set型別再重新轉回為陣列即可完成去重。

1

function

unique10 (arr)

4 console.log(unique10([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

也可以這麼寫:

1

function

unique10 (arr)

4 console.log(unique10([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

十一、reduce

1

function

unique11 (arr) , )5}

6 console.log(unique11([1, 2, 2, 2, 3, 1, 12, 7, 12])) //

[1, 2, 3, 12, 7]

陣列去重方法

1 es6提供了新的資料結構set,它類似於陣列,但是成員的值是唯一的,沒有重複的值。let arr 1,2,5,2,3,4,1,2,3,5,4,1,2,3,2,1,1,1,asd 123 123 123 asd 1,true,true,false console.log new set arr 或...

陣列去重方法

雙迴圈去重 雙重 for 或 while 迴圈是比較笨拙的方法,它的實現原理很簡單 先定義乙個包含原始陣列第乙個元素的陣列,然後遍歷原始陣列,將原始陣列中的每個元素與新陣列的每個元素進行比較,如果不重複則新增到新的陣列中,最後返回新的陣列,其缺點是如果陣列長度很長,那麼將會非常消耗記憶體 funct...

陣列去重方法

1.使用原生的filter和indexof來進行過濾和篩選。var filtered data.filter function item,index 複製 使用filter的第三個引數繫結this的值 var filtered2 data.filter function item,index,sel...