Array.prototype.uniq = function () {
var arr = [];
var flag = true;
this.forEach(function(item) {
// 排除 NaN (重要!!!) NaN 和自身不相等
// 除了NaN 其他数据 和 自己都 相等
if (item != item) {
// 只有第一次找到NaN 把他放进数组里面
flag && arr.indexOf(item) === -1 ? arr.push(item) : '';
flag = false;
} else {
arr.indexOf(item) === -1 ? arr.push(item) : ''
}
});
return arr;
}
var arr = [NaN,NaN,NaN,1,2,{},{},null,null,undefined,undefined];
var uniqueArr = arr.uniq();
console.log(uniqueArr); // [NaN, 1, 2, {…}, {…}, null, undefined]
// Es6 一行代码搞定
var uniqueArr2 = Array.from(new Set(arr));
console.log(uniqueArr2); // [NaN, 1, 2, {…}, {…}, null, undefined]