方法一
使用數(shù)組的indexof
方法,如果element
的index
不相等則說明element
相同误证,則過濾掉
Array.prototype.distinct1 = function () {
return this.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
}
方法二
ES6提供了數(shù)據(jù)結(jié)構(gòu)Set会放。類似于數(shù)組,但是沒有重復(fù)值诫隅「辏可以利用Set
數(shù)據(jù)結(jié)構(gòu)中值不能重復(fù)的特性去重
Array.prototype.distinct2 = function () {
let set = new Set(this);
return [...set];
}
方法三
遍歷兩個(gè)數(shù)組,將原數(shù)組的值和新數(shù)組的值一一進(jìn)行比較阎肝,如果原數(shù)組的值不存在則加入新數(shù)組中
Array.prototype.distinct3 = function () {
let result = [];
for (let i of this) {
let flag = 0;
for (let j of result) {
if (i === j) {
flag = 1;
}
}
if (flag === 0) {
result.push(i);
}
}
return result;
}
方法四
先將數(shù)組進(jìn)行排序挤渔,然后遍歷數(shù)組,將數(shù)組中每個(gè)值與其后一個(gè)值比較风题,如果不同則存入新數(shù)組
Array.prototype.distinct4 = function () {
var arr = this.sort();
var result = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] != arr[i + 1])
result.push(arr[i]);
}
return result;
}
方法五
js中數(shù)組也是對(duì)象判导,可以根據(jù)對(duì)象屬性的特性。遍歷數(shù)組沛硅,如果該值不是對(duì)象的屬性眼刃,則在對(duì)象中添加等于該值的屬性,并且同時(shí)把該值加入新數(shù)組
Array.prototype.distinct5 = function () {
let result = [];
let obj = {};
for (let x of this) {
if (!obj[x]) {
obj[x] = x;
result.push(x);
}
}
return result;
}
方法六
雙重循環(huán)遍歷數(shù)組摇肌,如果值相同擂红,使用splice
方法刪去后一個(gè)相同的值
Array.prototype.distinct6 = function () {
let arr = this;
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
以上六種方法均可以實(shí)現(xiàn)數(shù)組去重,區(qū)別是性能不同围小,并且有的方法會(huì)改變數(shù)組的順序昵骤。