這基本上算是一個(gè)老生常談的問(wèn)題了澎现,也很基礎(chǔ)仅胞,面試中問(wèn)的可能性很大,以下是我總結(jié)的一些方法剑辫,希望可以幫助到大家干旧。
1、利用ES6中的set數(shù)據(jù)結(jié)構(gòu)
let arr=[1,2,3,4,1,3,4,5];
//set中的成員具有唯一性揭斧,可以利用這一特性來(lái)去重
let newArr=[...new Set(arr)]
console.log(newArr) //[1,2,3,4,5]
3莱革、利用indexOf方法
let arr=[1,2,3,4,1,3,4,5];
function unique(arr){
let res=[];
for(let i = 0;i<arr.length;i++){
// 判斷新的數(shù)組中是否有當(dāng)前值的下標(biāo)
if(res.indexOf(arr[i])===-1){
res.push(arr[i])
}
}
return res
}
console.log(unique(arr)) //[1,2,3,4,5]
4、利用filter+indexOf的方法
let arr=[1,2,3,4,1,3,4,5];
function unique(arr){
let res=arr.filter((item,index)=>{
// 判斷當(dāng)前值的下標(biāo)是否等于自身的下標(biāo)讹开,如果不相等說(shuō)明是重復(fù)的
return arr.indexOf(item)===index
})
return res
}
console.log(unique(arr)) //[1,2,3,4,5]
5盅视、利用Object鍵值對(duì)
let arr=[1,2,3,4,1,3,4,5];
function unique(arr){
if(!(arr instanceof Array)){
console.log('不是數(shù)組')
return false
}
let res=[];
let obj={};
for(let i =0;i<arr.length;i++){
if(!obj[arr[i]]){
res.push(arr[i])
obj[arr[i]]=1
}else{
obj[arr[i]]++
}
}
return res;
}
console.log(unique(arr)) //[1,2,3,4,5]
6、利用reduce方法
let arr=[1,2,3,4,5,1,2,3,4]
function unique(arr){
let res=arr.reduce((previousValue,currentValue)=>{
if(previousValue.indexOf(currentValue)==-1){
previousValue.push(currentValue)
}
return previousValue;
},[])
return res
}
console.log(unique(arr)) //[1,2,3,4,5,]
7旦万、利用includes方法
let arr=[1,2,3,4,5,1,2,3,4]
function unique(arr){
let res=[]
for(var i = 0;i<arr.length;i++){
if(!res.includes(arr[i])){
res.push(arr[i])
}
}
return res
}
console.log(unique(arr)) //[1,2,3,4,5]
這些方法都可以實(shí)現(xiàn)數(shù)據(jù)去重闹击,無(wú)非是一些兼容性問(wèn)題
未完待續(xù)...