数组去重在面试中有时候会碰到,业务中也有的时候会用到。一般去重都是后端做的。其中的有的方法可能有问题,有更好的方式欢迎留言一起学习。
一、利用 ES6 Set 去重
function deweight(arr){
return Array.from(new Set(arr))
}
let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
console.log(deweight(arr));
二、for循环嵌套,然后splice去重
function deweight(arr){
for(var i = 0; i < arr.length; i++){
for(var j = i + 1; j < arr.length; j++){
if(arr[i] == arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr
}
let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
console.log(deweight(arr));
三、利用 indexOf 去重
function deweight(arr){
if(!Array.isArray(arr)){
console.log("type error");
return
}
let array = [];
for(var i = 0; i < arr.length; i++){
if(array.indexOf(arr[i]) === -1){
array.push(arr[i])
}
}
return array
}
let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
console.log(deweight(arr));
四、利用 includes 去重
function deweight(arr){
if(!Array.isArray(arr)){
console.log("type error");
return
}
let array = []
for(var i = 1; i < arr.length; i++){
if(!array.includes(arr[i])){
array.push(arr[i])
}
}
return array
}
let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
console.log(deweight(arr));
五、利用 reduce + includes 去重
function deweight(arr){
if(!Array.isArray(arr)){
console.log("type error");
return
}
return arr.reduce((prev,cur) => prev.includes(cur)?prev:[...prev,cur],[])
}
let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
console.log(deweight(arr));
六、利用 Map 数据结构 去重
function deweight(arr){
let map = new Map();
let array = new 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 arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
console.log(deweight(arr));
七、利用 filter 去重
function deweight(arr){
return arr.filter(function(item,index,arr){
return arr.indexOf(item,0) === index;
})
}
let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
console.log(deweight(arr));
八、利用 hasOwnProperty 去重
function deweight(arr){
let obj = {};
return arr.filter(function(item,index,arr){
return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
})
}
let arr=['true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN','a','a',{},{}];
console.log(deweight(arr));