3分鐘讓你搞清楚滚秩,對象元素的數(shù)組去重實現(xiàn)方法
今天我們來講講,對象元素的數(shù)組去重實現(xiàn)淮捆,普通簡單的數(shù)組我們就不講的郁油,都是很基礎(chǔ)的東西,如果還不知道基礎(chǔ)數(shù)組的學(xué)習(xí)的同學(xué)可以在后面留言攀痊,我再出數(shù)組基礎(chǔ)的教程桐腌。
需求
有這樣一個數(shù)組
實際上我們只需要
去重
簡單數(shù)組的去重
以對象為元素的數(shù)組去重
和數(shù)組相關(guān)的算法多種多樣,在你以為自己已經(jīng)掌握數(shù)組之后苟径,會發(fā)現(xiàn)很多和數(shù)組相關(guān)的算法仍舊很復(fù)雜案站。
下面我將講述一個入門等級的數(shù)組算法,解決上面提出的需求棘街。
1蟆盐、定義一個函數(shù)removeRepeat,它需要傳入2個參數(shù)遭殉,arr表示需要去重的數(shù)組石挂,field表示需要比較的key。比如我們的需求是比較 _id 是否有重復(fù)险污。
2痹愚、需要一個空數(shù)組,用來存儲每個對象元素中field對應(yīng)的value罗心。
3里伯、將所有field的值存到數(shù)組之后,它們的下標(biāo)一一對應(yīng)原數(shù)組的下標(biāo)(這點很重要)渤闷,接著我們需要2個對象集合,result用來存儲s里遍歷出來的元素脖镀,如果有重復(fù)飒箭,就將重復(fù)的元素丟到reSet對象里面。
4蜒灰、上一步得到了result和reSet2個對象弦蹂,那么,我們該用哪個對象來處理原數(shù)組的去重呢强窖?只需要reSet凸椿,reSet記錄了要去重的對象所在的下標(biāo),那么可以直接用splice干掉它翅溺。
5脑漫、說明
關(guān)鍵的第3和4步髓抑,都是用對象來處理,這樣做的好處是時間復(fù)雜度可以達到O(1)优幸,如果用數(shù)組來保存吨拍,則需要2個for循環(huán),時間復(fù)雜度變成了O(n2)网杆。
完整源碼
補充
上面的代碼也還可以再做兩點優(yōu)化羹饰。
1、更簡潔的代碼碳却。
2队秩、支持多個重復(fù)對象的去重,缺點是會改變原來的排序昼浦。
總結(jié)
數(shù)組還有各種有趣的操作馍资,也經(jīng)常是作為各大公司考察的題型之重,想成為前端開發(fā)工程師的你座柱,多練習(xí)和數(shù)組相關(guān)的算法會對你很有幫助迷帜。
如果你有更好的方法,可以留言互動哦色洞,然后想學(xué)習(xí)更多內(nèi)容戏锹,也歡迎留言哦,說不定下次就講你想學(xué)習(xí)的內(nèi)容了呢火诸!
記得轉(zhuǎn)發(fā)锦针,點贊,加關(guān)注哦置蜀!
更多WEB開發(fā)學(xué)習(xí)奈搜,歡迎關(guān)注微信公眾號:網(wǎng)頁前端開發(fā)學(xué)習(xí),《前端開發(fā)工程師必備》系列持續(xù)更新哦盯荤!