数组中含有NaN
es5
NaN是不会等于自身的,我们可以利用这个特性
function uniqueArray(array){
var NaNMark = true;
var temp = [];
for(let i = 0; i < array.length; i++){
//判断这个元素是不是NaN
if(array[i] !== array[i]){
NaNMark && temp.indexOf(array[i]) === -1 ? temp.push(array[i]) : ''
NaNMark = false;
}else{
temp.indexOf(array[i]) === -1 ? temp.push(array[i]) : ''
}
}
return temp;
}
es6
function uniqueArray(array){
return [...new Set(array)];
}
从上面看来,如果肯定数组中不会有空对象的话,用ES6的set会更加方便,但是set是不能去掉空对象的
数组中含有{},NaN
function uniqueArray(array){
var temp = [];
var NaNMark = true;
var emptyObjMark = true;
function isEmptyObj(object){
if(Object.prototype.toString.call(object) === "[obejct Object]"){
for(let i in object){
return false;
}else{
return true;
}
}else{
return false;
}
}
for(let i = 0; i < array.length; i++){
if(isEmptyObj(array[i])){
emptyObjMark && temp.indexOf(array[i]) === -1 ? temp.push(array[i]) : "";
emptyObjMark = false;
}else if(array[i] !== array[i]){ //判断NaN
NaNMark && temp.indexOf(array[i]) === -1 ? temp.push(array[i]) : ''
NaNMark = false;
}else{
temp.indexOf(array[i]) === -1 ? temp.push(array[i]) : ''
}
}
return temp;
}