
第一种: (最暴力)
Array.prototype.uniq = function () {
var args = this;
var len = args.length;
var result = [];
var flag = true;
for (var i = 0; i < len; i++) {
if (args.indexOf(args[i]) != -1) {//NaN不等于任何,包括他自身,所以args.indexOf(args[i])遇到NaN永远返回-1
if (i === args.indexOf(args[i])) {
result.push(args[i]);
}
} else if (flag) {
result.push(args[i]);
flag = false;
}
}
return result
}
第二种: (es6, 最简单)
Array.prototype.uniq2 = function () {
return Array.from(new Set(this))
}
第三种: filter() + indexOf()
let uniq3 = ary.filter((t, idx, arr) => {
return ary.indexOf(t) === idx
})
第四种: for循环 + indexOf()
function uniq4(arr) {
let newAry = [];
for (let i = 0; i < arr.length; i++) {
if (newAry.indexOf(arr[i]) === -1) {
newAry.push(arr[i])
}
}
return newAry
}
第五种: for循环 + includes()
function uniq5(arr) {
let res = [];
for (let i = 0; i < arr.length; i++) {
if (!res.includes(arr[i])) {
res.push(arr[i])
}
}
return res
}