zoukankan      html  css  js  c++  java
  • 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的数据消耗时间

  • 相关阅读:
    ~随笔A016~分布式技术发展
    BoF图像检索
    立体匹配-----NCC视差匹配
    对极几何与基础矩阵
    相机标定
    图像的拼接----RANSAC算法
    SIFT特征提取与检索
    Harris角点检测
    Python---图像基础处理
    PSO算法
  • 原文地址:https://www.cnblogs.com/ButterflyEffect/p/9681303.html
Copyright © 2011-2022 走看看