第一种:利用indexOf判断数组中的项是否存在于新数组中。
indeOf本身就是检索字符串中是否有需要的值,没有就返回-1。
var arr = [1,2,3,4,6,3,7,22,59,33,4];
Array.prototype.unique = function () {
var arr = [];
for (let i = 0;i<this.length;i++) {
if (arr.indexOf(this[i] === -1)) {
arr.push(this[i])
}
}
return arr;
}
arr.unique()
第二种:创建空数组和空对象,判断数组是否在对象中。
var arr = [1,2,3,4,6,3,7,22,59,33,4];
Array.prototype.unique = function () {
var tmp = {},arr = [];
for (let i = 0;i<this.length;i++) {
if (!tmp[this[i]]) {
tmp[this[i]] = true;
arr.push(this[i]);
}
}
reutrn arr;
}
arr.unique()
第三种:下标判断法。只有当前数是第一次出现的时候this.indexOf(this[i]) === i这个条件才满足。
var arr = [1,2,3,4,6,3,7,22,59,33,4];
Array.prototype.unique = function () {
let arr1 = [this[0]]
for (let i = 1;i<this.length;i++) {
if (this.indexOf(this[i]) === i) {
arr1.push(this[i]);
}
}
reutrn arr1;
}
arr.unique()
第四种:排序后再去重
var arr = [1,2,3,4,6,3,7,22,59,33,4];
Array.prototype.unique = function () {
let arr1 = []
this.sort()
for (let i = 0;i<this.length;i++) {
if (this[i] !== arr[arr.length - 1]) {
arr1.push(this[i]);
}
}
reutrn arr1;
}
arr.unique()
第五种:ES6中的Set
[...new Set([1,2,3,3,4])]