JS数组去重的几种方法

1,新建一个数组,遍历老数组,判断新数组中是否存在老数组中的项,若不存在,则将此项添加至新数组,若存在,则略过。

2,利用filter()方法,遍历数组,执行程序,将程序结果为true的项添加的新数组返回

3,new Set()

4,将数组排序,比较相邻的两项,如不相同,则添加至新数组

5,or of + OBject利用对象的属性不会重复这一特性,校验数组元素是否重复

具体实现代码及执行时间如下

<!DOCTYPE html>
<html lang="en">

<head></head>

<body></body>
<script>
    let arr1 = Array.from(new Array(1000000), (x, index) => {
        return index
    })

    let arr2 = Array.from(new Array(500000), (x, index) => {
        return index + index
    })

    let start = new Date().getTime()
    console.log('开始数组去重')

    function distinct(a, b) {
        // 数组去重
        let arr = a.concat(b)
        //1,filter 
        return delRepeated(arr)
    }

    function delRepeated(arr){
        //方法1, 用时11453ms
        // filter 遍历数组返回执行结果为true的项,组成一个新数组,indexOf从数组头部开始查找某项,返回其索引值,若找不到返回-1
        // return arr.filter((item,index)=>{
        //     return arr.indexOf(item) === index
        // })


        //方法2,
        //新建一个数组,遍历待去重的数组,若新数组中不包含此项,则将此项添加至新数组,若有则略过
        // let result = []
        // arr.forEach(item=>{//用时9428
        //     result.indexOf(item) === -1 && result.push(item)
        // })
        // arr.forEach(item=>{//用时9589
        //     !result.includes(item) && result.push(item)
        // })
        // return result

        // 方法3 new Set() 用时20ms
        //    return [...new Set(arr)]

        // 方法4 先用Array.sort()将数组排序,再比较相邻元素是否相等,从而排除重复项,用时20ms
        // let result = []
        // arr = arr.sort()
        // for(let i=0,len=arr.length;i<len;i++){
        //     arr[i] !== arr[i-1] && result.push(arr[i])
        // }
        // return result

        // 方法5 for of + OBject利用对象的属性不会重复这一特性,校验数组元素是否重复
        //    let result = []
        //    let obj = {}
        //    for(i of arr){
        //        if(!obj[i]){
        //           result.push(i)
        //           obj[i] = 1
        //        }
        //    }
        //    return result


        // 方法5是最优的



    }
    

    console.log('去重后的长度', distinct(arr1, arr2).length)

    let end = new Date().getTime()
    console.log('耗时', end - start)
</script>

</html>

 

posted @ 2021-03-01 15:06  乘风破浪的哥哥  阅读(1082)  评论(0)    收藏  举报