數組去重的6種方法


1.雙重循環遍歷

function unique1(arr){
// 遍歷數組arr
for(var i = 0, r = []; i < arr.length; i++){
// 遍歷數組r
for(var j = 0; j < r.length; j++){
// 如果遍歷到r中的元素等於arr中的當前元素退出循環
if(r[j] == arr[i]){
break;
}
}
// 如果遍歷到最后沒有發現有與arr當前元素相同的元素
if(j == r.length){
// 則把這個元素追加到末尾
r[r.length] = arr[i];
}
}
return r;
}

2.使用哈希數組的方式

function unique2(arr){
// 遍歷數組arr
for(var i = 0, hash = [], r = []; i < arr.length; i++){
// 如果哈希數組中不存在以arr[i]為下標的變量
if(hash[arr[i]] === undefined){
// 將這個值存入最終數組中
r[r.length] = arr[i];
// 並把該值作為下表存入哈希數組,給一個自定義的值
hash[arr[i]] = 1;
}
}
return r;
}

3.對象

function unique3(arr){
// 與第二種方式的算法基本一致,因為對象的存儲方式在底層就是數組
var obj = {};
// 遍歷數組
for(var i = 0, r = []; i < arr.length; i++){
// 在obj中如果不存在以arr的當前值為屬性名的屬性
if(!obj[arr[i]]){
// 將這個值存入最終數組中
r.push(arr[i]);
// 並把該值作為下表存入哈希數組,給一個自定義的值
obj[arr[i]] = 1;
}
}
return r;
}

4.先給數組排序

function unique4(arr){
// 給arr排序
arr.sort(function(a,b){return a-b})
// 遍歷數組
for(var i = 1; i < arr.length; i++){
// 如果當前值等於了前面的那個值
if(arr[i] === arr[i-1]){
// 刪除這個值
arr.splice(i,1);
// 因為刪除了一個值,需要讓循環向前移動一次
i--;
}
}
return arr;
}

5.通過下標

function unique5(arr){
// 遍歷數組
for(var i = 0; i < arr.length; i++){
// 遍歷數組尋找與arr當前值相等的值
for(var j = i + 1; ; ){
// j記錄找到的下標
j = arr.indexOf(arr[i], j);
// 如果j為-1了,代表后面沒有相同的值了
if(j == -1){
break;
}
// 刪除這個值
arr.splice(j, 1);
}
}
return arr;
}

6.

function unique6(arr){
// ES6新語法
return new Set(arr);
}

var arr = [5,4,9,1,6,8,7,5,4,2,4,5,6,4,2,6,4,2,1,5,9]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM