基礎的數組去重的方法,很簡單就能實作了,但是如果講到對象類型的元素去重,可就難倒了很多同學了。今天就由李老師來給大家分享一下,我們如何對JavaScript的對象類型的數組進行去重處理。
需求
首先我們現在有這樣一個數組,我們需要做一個去重操作
最後得到這樣的結果
去重
簡單數組的去重
以對象為元素的數組去重
和數組相關的算法多種多樣,在你以為自己已經掌握數組之後,會發現很多和數組相關的算法仍舊很複雜。
下面我們講述一個入門等級的數組算法,解決上面提出的需求。
1、定義一個函數removeRepeat,它需要傳入2個參數,arr表示需要去重的數組,field表示需要比較的key。比如我們的需求是比較 _id 是否有重複。
2、需要一個空數組,用來存儲每個對象元素中field對應的value。
3、将所有field的值存到數組之後,它們的下标一一對應原數組的下标(這點很重要),接着我們需要2個對象集合,result用來存儲s裡周遊出來的元素,如果有重複,就将重複的元素丢到reSet對象裡面。
4、上一步得到了result和reSet2個對象,那麼,我們該用哪個對象來處理原數組的去重呢?隻需要reSet,reSet記錄了要去重的對象所在的下标,那麼可以直接用splice幹掉它。
5、說明
關鍵的第3和4步,都是用對象來處理,這樣做的好處是時間複雜度可以達到O(1),如果用數組來儲存,則需要2個for循環,時間複雜度變成了O(n²)。
完整源碼
補充
上面的代碼也還可以再做兩點優化。
1、更簡潔的代碼。
2、支援多個重複對象的去重,缺點是會改變原來的排序。
總結
數組還有各種有趣的操作,也經常是作為各大公司考察的題型之中,想成為前端開發工程師的你,多練習和數組相關的算法會對你很有幫助。
如果你有更好的方法,可以留言互動哦,然後想學習更多内容,也歡迎留言哦,說不定下次就講你想學習的内容了呢!