JavaScript数组强力去重,数组中的内容可为任意值,包括NaN和Object
function distinct(arr) {
let NaNFlag = false;
let objStrArr = [];
return arr.filter((item, index)=> {
// 判断NaN
if (item !== item) {
if (NaNFlag) {
return false
} else {
NaNFlag = true;
return true
}
}
// 判断Object
if (typeof item === 'object') {
let str = JSON.stringify(item);
if (objStrArr.indexOf(str) !== -1) {
return false;
} else {
objStrArr.push(str);
return true;
}
}
// 其他
let n = arr.indexOf(item);
return n === index
})
}
var arr = ['a', 'a', 'b', {}, {}, {a: 'b'}, {a: 'c'}, {a: 'b'}, NaN, NaN, true, false, true, 1, 2, 1];
console.log(distinct(arr))
运行后结果如下: