数组不像对象和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
}
复制代码