JavaScript 高性能数组去重

一、创建测试模板
分别创建两个数组长度为10W和5W的数组,再通过distinct()方法合并两个数组,并去掉重复项

let arr1 = Array.from(new Array(100000), (x, index)=>{
    return index
})

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

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

function distinct(a, b) {
    // 数组去重
}

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

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

二、ES6新增了Set属性,基于这个特性我们可以效率去重数组


function distinct(a, b) {
    return Array.from(new Set([...a, ...b]))
}

处理15W的数据消耗时间

在两个数组长度后面分别加个0,在150W的数据下

三、for...of + Object
首先创建一个空对象,然后用 for 循环遍历
利用对象的属性不会重复这一特性,校验数组元素是否重复

function distinct(a, b) {
    let arr = a.concat(b)
    let result = []
    let obj = {}

    for (let i of arr) {
        if (!obj[i]) {
            result.push(i)
            obj[i] = 1
        }
    }

    return result
}

15W的数据消耗时间

150W的数据消耗时间

posted @ 2018-09-20 15:45  CH|heyi  阅读(176)  评论(0编辑  收藏  举报