NaN有两中通用判定方法和数组中一种判定方法:
- 一个是绝对不全等于(===)自身
- 一个是ES6的isNaN()
- 数组原型链上的Array.prototype.includes()
不等特性,需要借助占位符
var arr=[1,1,'true',true,true,5,'F',false, undefined, null,null,undefined, NaN, 0, 1, 'a', 'a', NaN,'NaN'];
function uniqueUseNotAllEqual(array) {
var temp = [], //一个临时数组
mark = true; // 标识位
//遍历当前数组
for (var i = 0, j = array.length; i < j; i++) {
// 标识位的作用就是用来判断是否存在NaN,第一次找到保留到新数组中
// 然后标识位置改为false是为了再次找到的时候不推入数组
if (array[i] !== array[i]) {
// 这里的不等特性,也可以用isNaN判断[ES6]
mark && temp.indexOf(array[i]) == -1 ? temp.push(array[i]) : '';
mark = false;
} else
temp.indexOf(array[i]) == -1 ? temp.push(array[i]) : '';
}
return temp;
}
uniqueUseNotAllEqual(arr);
console.log(uniqueUseNotAllEqual(arr))