陣列去重方法

2021-09-12 00:21:20 字數 1503 閱讀 6793

1. 使用原生的filter和indexof來進行過濾和篩選。

var filtered = data.filter(function(item, index));

複製**

使用filter的第三個引數繫結this的值

var filtered2 = data.filter(function(item, index, self));

複製**

2. 使用hash表,單獨使用乙個object來建立hash表,從單獨的obj的屬性是否存在來判斷。如果存在,那就將該屬性設定為true;

要點:使用hasownproperty()來進行判斷,並且使用雙目運算子。

function unique(a);

return a.filter(function(item, index))

}複製**

3. 使用hash表,並將每乙個item的資料型別進行分類,以便應對obj的key無論number、或者是string型別都是同乙個,無法識別的問題。

要點:使用typeof將item分類成為基礎原始型別和object型別,來進行不同的判斷。 針對基礎型別,使用hash表索引,在不同型別裡面儲存不同的key,不會導致number和string 覆蓋的問題。 針對object型別,直接使用indexof來進行標識key,檢索比較

function unique(a), "number": {}, "string": {}};

var aobj = ;

return a.filter(function(item, index)else

})}複製**

為unique新增乙個處理函式 比如陣列的某些項不能直接進行比較的

function uniqueby(a, dealfn);

return a.filter(function(item, index))

}function addprefix(item)

複製**

此處oseen還可以使用set型別來判斷

function uniqby(a, key) );

}複製**

4. 對原陣列使用sort之後再進行比較(將前乙個和後乙個比較)

要點:sort預設使用空引數,不制定規則也可。自定義規則還沒有試過。sort對於object型別的可能無效。 sort預設的就是以字串的順序來排的,會以string型別的來排。比如:"12",1, 4 -----> 1,12 4

function unique3(a));

}複製**

5. 使用es6的set,但是set構建的是乙個物件,因此需要array.from(obj)來進行轉換

要點: set型別是一種不允許重複型別的資料結構;

function uniqueset(a)

複製**

陣列去重方法

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...

陣列去重方法

第一種方法用set內的值不可重複的屬性 const array 1 4,6 4,64 4,478 function uniqueuseset arr 物件是一種以鍵值對儲存資訊的結構,並且不能有重複的鍵 function uniqueobject arr len arr.length for let...