1. 程式人生 > >兩種陣列去重方法比較

兩種陣列去重方法比較

通過indexOf和lastIndexOf來判斷是否唯一

是我今天看JS權威指南時候突然想到的,用indexOf和lastIndexOf來判斷是否唯一,如果不唯一則將重複項刪去,然後繼續判斷,實現如下

function unique(arr){
    for(let i=0,len=arr.length;i<len;i++){
        while(i!==arr.lastIndexOf(arr[i])){
            // 如果不唯一,則把後面重複的一位去掉
            arr.splice(arr.lastIndexOf(arr[i]),1)
            len
-- } } return arr }

經過改進之後,將註釋那行換成下面這樣

arr.splice(arr.indexOf(arr[i]),1)

這樣直接將前面的重複項去掉,而自動將i向前推進一位,效率高了將近1/3

第二種

這種是相當有創意的一種快速去重方法

function unique2(arr){
    var newArr = []
    for(let i=0,len=arr.length;i<len;i++){
        for(let j=i+1;j<len;j++){
            // 如果重複,則i向前推進,但不管重複項
if(arr[i]==arr[j]) j = ++i } // 將沒有重複項的推入到新陣列 newArr.push(arr[i]) } return newArr }

實驗結果

各自去重了一百萬次,未改進前,第二種是第一種的3倍,改進之後第二種是第一種的2倍,效率高得可怕,但第一種的排序是直接建立在原陣列之上,第二種則重新建立了一個數組,記憶體佔用方面還是略有差別,所以還是分情況分別適用。