一、數組去重的幾種方法
1、新建數組法
2、同一個數組刪除法
3、利用object/map/set去重法
4、先排序再移除法
5、Filter與indexOf法
二、數組去重代碼實現
1、新建數組法,即新建立一個數組,用來存儲結果,將原數組項逐個與新數組的成員進行比較,如果新數組中不存在就添加到新數組。時間複雜度:O(n^2)
2、同一個數組刪除法,兩個循環,將數組中的每個元素與其他未與自己比較的元素進行比較,遇到有重複時,將自己刪除,並進入下一個循環。這種方式相對效率較高,也不用新數組佔用空間。時間複雜度:O(logN)
注意:若是從前往後則需要對length和i進行--處理,因為數組的長度減少了。
3、利用object/map/set去重法,利用數據結構key是唯一的特性和set裡不允許重複value來去重,這種方式很討巧,但是效率也不高。時間複雜度:O(n^2)。
4、先排序再移除法,先將數組排好序,然後從後至前或從前往後逐個與下一個進行比較,如果遇到相同時就刪除當前項,進下一個比較。時間複雜度:O(n^2)
自前往後遍歷也要注意相同的問題,即length與i要相應減少。
5、Filter結合IndexOf法,利用indexOf返回數組中第一次出現目標項下標的特點,當內容相同且下標相同表示的就是是不重複的新項,就追加到新數組中,如果查找到但下標不相說明重複了,跳出進行下一個比較。時間複雜度:O(n^2)
最簡的方式:a.filter((item, i) => i === a.indexOf(item)),這種寫法極簡,但是效率不高,不建議這麼用。具體原理實現如下:
這兩種都比極簡法好,極簡法是沒做任何優化,但因為filer與indexOf都是原生的方法,效率也還可以。
附:filter與indexOf實現源碼:
閱讀更多 刀法如飛 的文章
關鍵字: 數據結構 JavaScript 幾種