题目描述
为 Array 对象添加一个去除重复项的方法
输入
[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]
输出
[false, true, undefined, null, NaN, 0, 1, {}, {}, 'a']
1.
Array.prototype.uniq = function () {
var res=[],flag=true;
this.forEach(function(c,i){
if(res.indexOf(c)==-1){
if(c!=c){ // 判断是不是NaN,只将第一个NaN放入res中
if(flag){
res.push(c);
flag=false;
}
}
else res.push(c);
}
});
return res;
}
判断x是不是NaN:x!=x为true,则x为NaN。
flag的作用相当于一个开关,只让第一个NaN存入res中,之后的都不存。
2.强大如ES6
Array.prototype.uniq = function () {
return [...new Set(this)];
}
ES6扩展运算符... :将一个数组转为用逗号分隔的参数序列
console.log(...[1, 2, 3])
// 1 2 3