js數組去重,老生長談,今天對其進行一番歸納,總結出來4種方法
貼入代碼前 ,先對浏覽器Array對象進行支援indexOf和forEach的polyfill
Array.prototype.indexOf = Array.prototype.indexOf || function(item) {
for (var i = 0, j = this.length; i < j; i++) {
if (this[i] === item) {
return i;
}
}
return -1;
}
Array.prototype.forEach = Array.prototype.forEach || function(callback, thisArg) {
if (!callback || typeof callback !== 'function') return;
for (var i = 0, j = this.length; i < j; i++) {
callback.call(thisArg, this[i], i, this);
}
}
方法一:周遊數組,建立新數組,利用indexOf判斷是否存在于新數組中,不存在則push到新數組,最後傳回新數組
1 function removeDuplicatedItem(ar) {
2 var ret = [];
3
4 for (var i = 0, j = ar.length; i < j; i++) {
5 if (ret.indexOf(ar[i]) === -1) {
6 ret.push(ar[i]);
7 }
8 }
9
10 return ret;
11 }
方法二:周遊數組,利用object對象儲存數組值,判斷數組值是否已經儲存在object中,未儲存則push到新數組并用object[arrayItem]=1的方式記錄儲存
function removeDuplicatedItem2(ar) {
var tmp = {},
ret = [];
for (var i = 0, j = ar.length; i < j; i++) {
if (!tmp[ar[i]]) {
tmp[ar[i]] = 1;
ret.push(ar[i]);
}
}
return ret;
}
方法三:數組下标判斷法, 周遊數組,利用indexOf判斷元素的值是否與目前索引相等,如相等則加入
function removeDuplicatedItem3(ar) {
var ret = [];
ar.forEach(function(e, i, ar) {
if (ar.indexOf(e) === i) {
ret.push(e);
}
});
return ret;
}
方法四:數組先排序, 然後比較倆數組一頭一尾進行去重
function removeDuplicatedItem4(ar) {
var ret = [],
end;
ar.sort();
end = ar[0];
ret.push(ar[0]);
for (var i = 1; i < ar.length; i++) {
if (ar[i] != end) {
ret.push(ar[i]);
end = ar[i];
}
}
return ret;
}
有其他好的方式 ,歡迎補充。