zoukankan      html  css  js  c++  java
  • js中数组去重方法及性能对比

    js中数组的

    数组去重

    常用的数组去重方法以及效率分析:

    首先我们先构建一个数组,主要是用于进行去重实验,我们主要实验的量级为1000,10000,100000,500000。具体的生成数组的方法如下:

    function buildDataArr (size) {
        var array = [];
        for (var i =0; i< size; i++) {
            var num = Math.round(Math.random() * size);
            array.push(num);
        }
        return array;
    }
    var arr1 = buildDataArr(1000);
    var arr2 = buildDataArr(10000);
    var arr3 = buildDataArr(100000);
    var arr4 = buildDataArr(500000);
    
    • 通过使用filter和index 方法进行去重

      function distinct(numberArr) {
          return numberArr.filter((item, index)=> {
              return numberArr.indexOf(item) === index
          })
      }
      
    • 通过使用双重循环进行数组去重

      function distinctFor(numberArr) {
          for (let i=0, len=numberArr.length; i<len; i++) {
              for (let j=i+1; j<len; j++) {
                  if (numberArr[i] == numberArr[j]) {
                      numberArr.splice(j, 1);
                      // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
                      len--;
                      j--;
                  }
              }
          }
          return numberArr
      }
      
    • 通过使用for…of 和include进行去重

      function distinctInclude(numberArr) {
          let result = []
          for (let i of numberArr) {
              !result.includes(i) && result.push(i)
          }
          return result
      }
      
    • 使用sort进行去重

      function distinctSort(numberArr) {
          numberArr = numberArr.sort()
          let result = [numberArr[0]]
      
          for (let i=1, len=numberArr.length; i<len; i++) {
              numberArr[i] !== numberArr[i-1] && result.push(numberArr[i])
          }
          return result
      }
      
    • 使用 new Set进行去重

      function distinctSet(numberArr) {
          return Array.from(new Set(numberArr))
      }
      
    • 使用对象进行去重

      function distinctObj(numberArr) {
          let result = []
          let obj = {}
          for (var i of numberArr) {
              if (!obj[i]) {
                  result.push(i)
                  obj[i] = 1
              }
          }
          return result
      }
      

    好了上面的方法介绍完了,我们来看一下性能:

    1000 10000 100000 500000
    distinctFilter 0 40 3992 105859
    distinctFor 2 59 5873 147234
    distinctInclude 1 24 2320 54794
    distinctSort 1 8 69 264
    distinctSet 0 1 12 78
    distinctObj 1 1 9 33
  • 相关阅读:
    (转)Mat, vector<point2f>,Iplimage等等常见类型转换
    人脸检测与识别的趋势和分析
    经典网络LeNet5看卷积神经网络各层的维度变化
    C++: int int& int * int**的区别、联系和用途
    c++从txt中读取数据,数据并不是一行路径(实用)
    Spyder常用快捷键
    批量读写变换图片(转)
    OpenCV属性页配置问题~
    视觉目标检测和识别之过去,现在及可能(2017.06.28)
    数据库---SQL Server
  • 原文地址:https://www.cnblogs.com/ShuiNian/p/11210633.html
Copyright © 2011-2022 走看看