var a = [3, 62, null, 0, 38, undefined, NaN,NaN, ‘ ‘, 38, " "];
//1.set+array 不能区别nan ‘‘ ""
// 优点:代码简洁,速度快 时间复杂度O(N)
//缺点:需要一个额外的set和array的存储空间,空间复杂度 O(N)
function uniqueArray(arr){
// return Array.from(new Set(arr))
return [...new Set(arr)]
}
console.log(uniqueArray(a))
//2.splice 不能区别 null undefined ‘‘ ""
// 优点:不需要使用额外的存储空间,空间复杂度为O(1)
// 缺点:需要频繁的内存移动,双重循环,时间复杂度为O(N2)
function spliceUnique(arr){
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
if(arr[j] == arr[i]){
arr.splice(j,1);
j--
}
}
}
return arr;
}
console.log(spliceUnique(a))
// 3.array indexof 能区别 null undefined ‘‘ ""
// 时间复杂度为O(N2),空间复杂度为O(N)
function arrayUnique(arr){
let tempArr = [];
for(let i=0;i<arr.length;i++){
if(tempArr.indexOf(arr[i]) < 0){
tempArr.push(arr[i])
}
}
return arr;
}
console.log(arrayUnique(a))
// 4.array+object 能区别 null undefined ‘‘ "" nan
function objectUnique(arr){
let obj = {},array = [];
for(let i=0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]] = true;
array.push(arr[i])
}
}
return array;
}
console.log(objectUnique(a))