练习牛客网笔试题--前端js--3-为 Array 对象添加一个去除重复项的方法
// 题目描述
// 为 Array 对象添加一个去除重复项的方法
// 输入 [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]
// 输出 [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
1.自己的练习
Array.prototype.uniq = function () {
const set = new Set(this);
return [...set]
}
2.题解
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
// 此处的indexOf() 返回遇到的第一个参数的索引,对于重复的元素,只会返回第一次出现此元素的索引,所以元素本身的索引不等于查询到的索引,这样只保存第一次出现的元素,就实现了去重
if (i === args.indexOf(args[i])) {
result.push(args[i]);
}
} else if (flag) {
result.push(args[i]);
flag = false;
}
}
return result
}