zoukankan      html  css  js  c++  java
  • js_数组去重效率对比

    学习javascript已经快两年了,也不知道到了什么程度了。

    说说我对javascript的理解,在电脑的世界里,只有数据。

    数组,对象,字符串。对这些数据进行操作就可以完成很多业务逻辑,和页面的交互。

    对这些数据进行交互会有很多方法,有些效率高(耗时低),有些效率低(耗时高),这就确定你的代码运行的快慢了。

    下面是一个测试数组去重的方法。


     1 <!DOCTYPE html>
     2 <html>
     3 
     4     <head>
     5         <meta charset="UTF-8">
     6         <title></title>
     7     </head>
     8 
     9     <body>
    10 
    11         <script>
    12             //检查耗时逻辑
    13             let arr1 = Array.from(new Array(100000), (x, index) => {
    14                 return index
    15             })
    16 
    17             let arr2 = Array.from(new Array(50000), (x, index) => {
    18                 return index + index
    19             })
    20 
    21             let start = new Date().getTime()
    22             console.log('开始数组去重')
    23             console.log('去重后的长度', distinct(arr1, arr2).length)
    24 
    25             let end = new Date().getTime()
    26             console.log('耗时', end - start)
    27             //结束
    28 
    29             //方法一,耗时5108
    30             /*function distinct(a, b) {
    31                 let arr = a.concat(b);
    32                 return arr.filter((item, index) => {
    33                     return arr.indexOf(item) === index
    34                 })
    35             }*/
    36 
    37             //方法二
    38             /*function distinct(a, b) {
    39                 let arr = a.concat(b);
    40                 for(let i = 0, len = arr.length; i < len; i++) {
    41                     for(let j = i + 1; j < len; j++) {
    42                         if(arr[i] == arr[j]) {
    43                             arr.splice(j, 1);
    44                             // splice 会改变数组长度,所以要将数组长度 len 和下标 j 减一
    45                             len--;
    46                             j--;
    47                         }
    48                     }
    49                 }
    50                 return arr
    51             }*/
    52 
    53             //方法三,耗时152
    54             /*function distinct(a, b) {
    55                 return Array.from(new Set([...a, ...b]))
    56             }*/
    57 
    58             //方法四,耗时39
    59             function distinct(a, b) {
    60                 let arr = a.concat(b)
    61                 let result = []
    62                 let obj = {}
    63 
    64                 for(let i of arr) {
    65                     if(!obj[i]) {
    66                         result.push(i)
    67                         obj[i] = 1
    68                     }
    69                 }
    70                 return result
    71             }
    72         </script>
    73     </body>
    74 
    75 </html>
    View Code

     

    原文链接

  • 相关阅读:
    discuz常用变量
    Discuz!X/模板标签说明
    Discuz x 默认模板文件目录说明
    apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
    基于Java的数据采集(三)
    基于Java的数据采集(二)
    基于Java的数据采集(一)
    使用Spring JDBCTemplate简化JDBC的操作
    基于原生PHP交叉会员权限控制
    PHP上传压缩包并自解压方法
  • 原文地址:https://www.cnblogs.com/wush-1215/p/9753076.html
Copyright © 2011-2022 走看看