數組不像對象和hash有惟一的標誌特徵(key)。因此,數組去重的核心就是【1】數組內元素互相比較,而後放入新的數組中。【2】參照對象構建一個惟一的特徵標誌,而後放入新數組中。如下就是依照這種思路產生的方法。【3】數組中含對象的去重方式我採用使用JSON.stringify()
將對象轉換成JSON字符串進行比較的方式。數組
let a=[{a:1},{b:2},{c:3},{a:1},{d:2}]
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
for(let i=0;i<arr.length;i++){
let unexit=true
for(let j=i+1;j<arr.length;j++){
if(JSON.stringify(arr[i])===JSON.stringify(arr[j])){
unexit=false
break
}
else{
unexit=true
}
}
if(unexit){
b.push(arr[i])
}
}
return b
}
複製代碼
相鄰元素去重的核心在於Array.sort()可以對數組進行排序。這樣相等的數組就會在相鄰的位置,經過比較相鄰的元素就能夠起到去重的做用【1】。bash
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let Arr=arr.sort()
let b=[]
for(let i=0;i<Arr.length;i++){
if(Arr[i]!==Arr[i+1]){
b.push(Arr[i])
}
}
return b
}
複製代碼
在一個對象裏面key值是惟一的,因此經過遍歷數組給每一個數組一個標誌,經過標誌去重【2】數據結構
let a=[{a:1},{b:2},{c:3},{a:1},{d:2}]
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
let hash={}
for(let i=0;i<arr.length;i++){
if(!hash[JSON.stringify(arr[i])]){
hash[JSON.stringify(arr[i])]=true
b.push(arr[i])
}
}
return b
}
複製代碼
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
for(let i=0;i<arr.length;i++){
if(b.indexOf(arr[i])==-1){
b.push(arr[i])
}
}
return b
}
複製代碼
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=[]
arr.forEach(res=>{
if(b.indexOf(res)==-1){
b.push(res)
}
})
return b
}
複製代碼
Set數據相似於數組,可是成員的值都是惟一的,沒有重複的值。它能夠接收一個數組,類於:let a=[1,2,3,1,2] Set(a)=>1,2,3 因此可使用Set()實現去重。ui
let c=[1,2,3,4,5,6,1,2,3]
function unique(arr){
let b=new Set(arr)
let c=Array.from(b)
return c
}
複製代碼