题目描述
为 Array 对象添加一个去除重复项的方法
示例1
输入
[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’, ‘a’, NaN]
输出
[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’]
参考链接
一道很有意思的题目,注意点很多。。。
首先: {}和{}是不相等的,NaN和NaN是不相等的,而示例中是排除了多个NaN,只剩下一个,而{}可以保留多个,所以通过flag和typeof双重关卡来控制。
Array.prototype.uniq = function () {
var resArr = [];
var flag = true;
for(var i=0;i<this.length;i++){
if(resArr.indexOf(this[i]) == -1){
if(this[i] != this[i] && typeof(this[i])==='number'){ //排除 NaN
if(flag){
resArr.push(this[i]);
flag = false;
}
}else{
resArr.push(this[i]);
}
}
}
return resArr;
}