數組去重有很多方法,效率較高的方法是利用hash表來檢測數組中是否有重復項。廢話不多說,我查資料編寫了如下代碼:
function unique(arr){
var result = [], hash = {}; //定義新數組result ,定義hash.
for (var i = 0, elem; (elem = arr[i]) !=null; i++) { //令elem等於傳入的數組的某一項並遍歷
console.log(hash[elem]); //如果在這里加入輸出語句,輸出hash表中每個項是否存在,輸出的結果是4個undefined、true、2個undefined、true,看下面我定義的數組,遍歷前四個數的時候,hash表中沒有這四個值(1,23,34,45),所以if語句成立,將這四個數push到result中,另這些表中的數都為true。當遍歷到第二個1的時候,hash[elem] = true , 所以if語句就不執行了,就不會將重復的數組push進去,也就達到了目的
if(!hash[elem]){
result.push(elem);
hash[elem] = true;
}
console.log(hash[elem])
}
console.log(result); //[1,23,34,45,6,4]
console.log(hash instanceof Object); //true
return result;
}
var arr = [1,23,34,45,1,6,4,23];
unique(arr);
我個人是這樣理解的,如果有什么偏差,請指出哦~