天天看點

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法
for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

基礎的數組去重的方法,很簡單就能實作了,但是如果講到對象類型的元素去重,可就難倒了很多同學了。今天就由李老師來給大家分享一下,我們如何對JavaScript的對象類型的數組進行去重處理。

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

需求

首先我們現在有這樣一個數組,我們需要做一個去重操作

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

最後得到這樣的結果

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

去重

簡單數組的去重

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

以對象為元素的數組去重

和數組相關的算法多種多樣,在你以為自己已經掌握數組之後,會發現很多和數組相關的算法仍舊很複雜。

下面我們講述一個入門等級的數組算法,解決上面提出的需求。

1、定義一個函數removeRepeat,它需要傳入2個參數,arr表示需要去重的數組,field表示需要比較的key。比如我們的需求是比較 _id 是否有重複。

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

2、需要一個空數組,用來存儲每個對象元素中field對應的value。

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

3、将所有field的值存到數組之後,它們的下标一一對應原數組的下标(這點很重要),接着我們需要2個對象集合,result用來存儲s裡周遊出來的元素,如果有重複,就将重複的元素丢到reSet對象裡面。

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

4、上一步得到了result和reSet2個對象,那麼,我們該用哪個對象來處理原數組的去重呢?隻需要reSet,reSet記錄了要去重的對象所在的下标,那麼可以直接用splice幹掉它。

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

5、說明

關鍵的第3和4步,都是用對象來處理,這樣做的好處是時間複雜度可以達到O(1),如果用數組來儲存,則需要2個for循環,時間複雜度變成了O(n²)。

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

完整源碼

補充

上面的代碼也還可以再做兩點優化。

1、更簡潔的代碼。

2、支援多個重複對象的去重,缺點是會改變原來的排序。

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

總結

數組還有各種有趣的操作,也經常是作為各大公司考察的題型之中,想成為前端開發工程師的你,多練習和數組相關的算法會對你很有幫助。

for根據ID去重_【基礎必學】對象類型元素數組去重實作方法

如果你有更好的方法,可以留言互動哦,然後想學習更多内容,也歡迎留言哦,說不定下次就講你想學習的内容了呢!