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
  • 相关阅读:
    array and ram
    char as int
    pointer of 2d array and address
    Install SAP HANA EXPRESS on Google Cloud Platform
    Ubuntu remount hard drive
    Compile OpenSSL with Visual Studio 2019
    Install Jupyter notebook and tensorflow on Ubuntu 18.04
    Build OpenCV text(OCR) module on windows with Visual Studio 2019
    Reinstall VirtualBox 6.0 on Ubuntu 18.04
    Pitfall in std::vector<cv::Mat>
  • 原文地址:https://www.cnblogs.com/ShuiNian/p/11210633.html
Copyright © 2011-2022 走看看