最近看了蠻多陣列去重的方法,想做乙個系統的歸納總結
新建陣列,遍歷,用indexof判斷(ie8+),值不在新陣列就push
// an highlighted block
var a=[1
,1,3
,9,4
,3,2
,3,6
,7,5
,11]function
uniq
(array)
}return temp;
} console.
log(
uniq
(a))
陣列下標法
陣列下標法還是得呼叫「indexof」效能跟方法1差不多,
實現思路:如果當前陣列的第i項在當前陣列中第一次出現的位置不是i,
那麼表示第i項是重複的,忽略掉。否則存入結果陣列。
// an highlighted block
function
uniq3
(array)
}return result;
}var a3 =[1
,2,"2",4
,9,"a"
,"a",2
,3,5
,6,5
];console.
log(
uniq3
(a3)
);
物件鍵值去重法給出乙個不同型別的陣列速度最快, 佔空間最多(空間換時間)
該方法執行的速度比其他任何方法都快, 就是占用的記憶體大一些。
現思路:新建一js物件以及新陣列,遍歷傳入陣列時,判斷值是否為js物件的鍵,
不是的話給物件新增該鍵並放入新陣列。
注意點:判斷是否為js物件鍵時,會自動對傳入的鍵執行「tostring()」,
不同的鍵可能會被誤認為一樣,例如n[val]-- n[1]、n[「1」];
解決上述問題還是得呼叫「indexof」。
// an highlighted block
function
uniq1
(array)
;var result =
;var type ='';
var val;
for(
var i=
0; i) result.
push
(val);}
else
if(temp[val]
.indexof
(type)
=='-1')}
return result;
}var a1 =[1
,2,"2",4
,9,"a"
,"a",2
,3,5
,6,5
];console.
log(
uniq1
(a1)
);
排序後相鄰去除法(破壞原陣列)給傳入陣列排序,排序後相同值相鄰然後遍歷時,新陣列只加入不與前一值重複的值
// an highlighted block
function
uniq2
(array)
}return result;
}var a2 =[1
,2,"2",4
,9,"a"
,"a",2
,3,5
,6,5
];console.
log(
uniq2
(a2)
)
優化遍曆法獲取沒重複的最右一值放入新陣列推薦的方法
實現思路:獲取沒重複的最右一值放入新陣列。
(檢測到有重複值時終止當前迴圈同時進入頂層迴圈的下一輪判斷)
// an highlighted block
var a4 =[1
,2,2
,3,5
,3,6
,5];
function
uniq4
(array)
} result.
push
(array[i]);
}return result;
}console.
log(
uniq4
(a4)
);
Js面試題(一) js實現陣列去重怎麼實現?
方法1 建立乙個新的臨時陣列來儲存陣列中已有的元素 方法2 使用雜湊表儲存已有元素 方法3 使用indexof判斷陣列元素第一次出現的位置是否為當前位置 方法4 先排序再去重 第一種方法和第三種方法都使用了indexof 這個函式的執行機制也會遍歷陣列 第二種使用了雜湊表,是最快的 第三種也有乙個排...
JS 陣列去重實現,一道面試題
今日去某公司面試web前端,本來對這個公司感覺一般,但是技術面試兩面一共從下午2 30到5 30,各種問題問,主要以js為主,頓時對這個公司有了好的印象,個人感覺面試的水平高最起碼表明乙個公司的態度。問的還算是很給力,都是一般不幾個常用到的,但是想一想確實還挺實用,有了這次思路,下次自己玩前端的時候...
JS實用功能 9 面試中常遇見的陣列去重
js陣列去重是面試中並不少見的問題,聽起來很簡單,當你興高采烈地回答了你的方法之後,你以為這道題就結束了嗎?no,一般來說,面試官會繼續問你 除了你剛剛說的方法,還有其他更好的方法嗎?這時的你就需要了解多幾種js陣列去重的方法了。下面我們先來看看常見的去重方法先吧。拿前乙個資料和後面的資料做對比,與...