测试数组:
let arr = [ 1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN', 0, 0, 'a', 'a',{},{} ] ;
一、ES6 Set
let newArr = Array.from(new Set(arr));
// 或者 let newArr = [...new Set(arr)];
console.log(newArr);
// [ 1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {}, {} ]
// {} 没有去重
二、includes / indexOf
function unique(arr){
let array = [];
for(let i=0; i<arr.length; i++){
if(!array.includes(arr[i])){
array.push(arr[i]);
}
}
return array;
}
let newArr = unique(arr);
console.log(newArr);
// [ 1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {}, {} ]
// {} 没有去重
function unique(arr){
let array = [];
for(let i=0; i<arr.length; i++){
if(array.indexOf(arr[i]) === -1){
array.push(arr[i]);
}
}
return array;
}
let newArr = unique(arr);
console.log(newArr);
// [1, "true", true, 15, false, undefined, null, NaN, NaN, "NaN", 0, "a", {}, {}]
// NaN、{} 没有去重
三、两个 for 循环 + splice
function unique(arr){
for(let i=0; i<arr.length; i++){
for(let j=i+1; j<arr.length; j++){
if(arr[i]===arr[j]){
arr.splice(j,1);
j--;
}
}
}
}
unique(arr);
console.log(arr);
// [1,'true',true,15,false,undefined,null,NaN,NaN,'NaN',0,'a',{},{}]
// NaN、{} 没有去重
四、sort
function unique(arr){
arr = arr.sort();
let array = [arr[0]];
for(let i=1; i<arr.length; i++){
if(arr[i]!==arr[i-1]){
array.push(arr[i]);
}
}
return array;
}
let newArray = unique(arr);
console.log(newArray);
// [0, 1, 15, "NaN", NaN, NaN, {}, {}, "a", false, null, true, "true", undefined]
// NaN、{} 没有去重
function unique(arr){
let array = arr;
let len = array.length;
array.sort((a,b)=>a-b);
function loop(index){
if(index>=1){
if(array[index]===array[index-1]){
array.splice(index,1)
}
loop(index-1);
}
};
loop(len-1);
return array;
}
let newArr = unique(arr);
console.log(newArr);
// [1, "a", "true", true, 15, false, 1, {}, null, NaN, NaN, "NaN", 0, "a", {}, undefined]
// NaN、{} 没有去重
五、map
function unique(arr){
let map = new Map();
let array = [];
for(let i=0; i<arr.length; i++){
if(map.has(arr[i])){
map.set(arr[i],true);
} else {
map.set(arr[i],false);
array.push(arr[i]);
}
}
return array;
}
let newArr = unique(arr);
console.log(newArr);
// [ 1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {}, {} ]
// {} 没有去重
六、reduce + includes
function unique(arr){
return arr.reduce((res,item)=>res.includes(item) ? res : res.concat(item), []);
// return arr.reduce((res,item)=>res.includes(item) ? res : [...res,item], []);
}
let newArr = unique(arr);
console.log(newArr);
// [ 1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {}, {} ]
// {} 没有去重
七、filter
function unique(arr){
return arr.filter((item,index,arr)=>arr.indexOf(item)===index)
}
let newArr = unique(arr);
console.log(newArr);
// [ 1, 'true', true, 15, false, undefined, null, 'NaN', 0, 'a', {}, {} ]
// {} 没有去重, NaN 都没有了
八、hasOwnProperty
function unique(arr) {
let obj = {};
return arr.filter(function(item){
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
let newArr = unique(arr);
console.log(newArr);
// [ 1, 'true', true, 15, false, undefined, null, NaN, 'NaN', 0, 'a', {} ]
// 全部都去重了