JavaScript专题之数组去重

这基本上算是一个老生常谈的问题了,也很基础,面试中问的可能性很大,以下是我总结的一些方法,希望可以帮助到大家。

1、利用ES6中的set数据结构

let arr=[1,2,3,4,1,3,4,5];
//set中的成员具有唯一性,可以利用这一特性来去重
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++){
        // 判断新的数组中是否有当前值的下标
        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)=>{
       // 判断当前值的下标是否等于自身的下标,如果不相等说明是重复的
        return arr.indexOf(item)===index  
    })
  return res
}
console.log(unique(arr))  //[1,2,3,4,5]

5、利用Object键值对

let arr=[1,2,3,4,1,3,4,5];
function unique(arr){
    if(!(arr instanceof Array)){
        console.log('不是数组')
        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]

这些方法都可以实现数据去重,无非是一些兼容性问题
未完待续...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容