1.简单的for循环判断前后两个值相不相等(前提这个数组是有序的,无序的话使用sort排一下序),如果相等,则删除
let arr = [1, 2, 3, 4, 4, 5, 6, 7, 3, 3, 3]
arr.sort((a,b)=>a-b)
for(let i=0;i<=arr.length-1;i++){
if(arr[i]==arr[i+1]){
arr.splice(i,1)
i--
}
}
console.log(arr) //[1, 2, 3, 4, 5, 6, 7]
2.使用includes判断,这个需要新开一个数组去接收原数组的值
includes:判断这个数组是否包含某个数,如果是返回true,如果没有返回false
let arr = [1, 2, 3, 4, 4, 5, 6, 7, 3, 3, 3]
let set=[]
for(let item of arr){
if(!set.includes(item)){
set.push(item)
}
}
console.log(set)//[1, 2, 3, 4, 5, 6, 7]
3.使用filter过滤器组合indexOf去判断
filter()是一个过滤器函数,indexOf(x)返回x在这个函数首次出现的位置
let arr = [1, 2, 3, 4, 4, 5, 6, 7, 3, 3, 3]
let set= arr.filter((item,index)=>{
//判断当前值出现的第一次下标是否等于当前下标
return arr.indexOf(item)==index
})
console.log(set)
4.使用indexOf()在一个新数组里面判断(和includes方法类似)
indexOf():如果这个值存在则返回第一次出现的下标,不存在返回-1,注意:indexOf方法区分大小写
let arr = [1, 2, 3, 4, 4, 5, 6, 7, 3, 3, 3]
let set=[]
for(let item of arr){
//set.indexOf(item)==-1 说明这个值从未出现过在这个数组里面,出现了就不会等于-1,而等于这个值第一次出现的下标
if(set.indexOf(item)==-1){
set.push(item)
}
}
console.log(set)
利用set数据结构不会出现重复值
1.使用扩展运算符
let arr = [1, 2, 3, 4, 4, 5, 6, 7, 3, 3, 3]
let set=new Set(arr)
console.log([...set])
为什么要使用扩展运算符?...代表扩展运算符
就是将一个数组,变为参数序列 ,我们来看一段代码(小插曲)
2.使用Array.from()方法强制转换成数组
let arr = [1, 2, 3, 4, 4, 5, 6, 7, 3, 3, 3]
let set=Array.from(new Set(arr))
console.log(set)
5.使用哈希表
let arr = [1, 2, 3, 4, 4, 5, 6, 7, 3, 3, 3]
let set=[]
let hash={}
for(let item of arr){
if(!hash[item]){
set.push(item)
//把当前的这个值做个标记
hash[item]=true
}
}
console.log(hash) //输出哈希结构
console.log(set) //输出不重复的值
这个哈希表的方法其实和indexof和includes方法很相似
好了:总结到这里,希望对我们都有帮助