建议一定要看的方法:数组去重的方法

109 阅读1分钟

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)

image.png

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)

image.png

利用set数据结构不会出现重复值

1.使用扩展运算符

let arr = [1, 2, 3, 4, 4, 5, 6, 7, 3, 3, 3]
let set=new Set(arr)
console.log([...set])

为什么要使用扩展运算符?...代表扩展运算符

就是将一个数组,变为参数序列 ,我们来看一段代码(小插曲)

image.png

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)

image.png

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) //输出不重复的值

image.png 这个哈希表的方法其实和indexof和includes方法很相似

好了:总结到这里,希望对我们都有帮助