zoukankan      html  css  js  c++  java
  • 2019.08.30数组去重的几种方法以及所需时间对比

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>数组去重方法</title>
    </head>
    <body>
    <script>


    function unique1(arr){
    // 遍历数组arr
    for(var i = 0, r = []; i < arr.length; i++){
    // 遍历数组r
    for(var j = 0; j < r.length; j++){
    // 如果遍历到r中的元素等于arr中的当前元素退出循环
    if(r[j] == arr[i]){
    break;
    }
    }
    // 如果遍历到最后没有发现有与arr当前元素相同的元素
    if(j == r.length){
    // 则把这个元素追加到末尾
    r[r.length] = arr[i];
    }
    }
    return r;
    }


    function unique2(arr){
    // 遍历数组arr
    for(var i = 0, hash = [], r = []; i < arr.length; i++){
    // 如果哈希数组中不存在以arr[i]为下标的变量
    if(hash[arr[i]] === undefined){
    // 将这个值存入最终数组中
    r[r.length] = arr[i];
    // 并把该值作为下表存入哈希数组,给一个自定义的值
    hash[arr[i]] = 1;
    }
    }
    return r;
    }


    function unique3(arr){
    // 与第二种方式的算法基本一致,因为对象的存储方式在底层就是数组
    var obj = {};
    // 遍历数组
    for(var i = 0, r = []; i < arr.length; i++){
    // 在obj中如果不存在以arr的当前值为属性名的属性
    if(!obj[arr[i]]){
    // 将这个值存入最终数组中
    r.push(arr[i]);
    // 并把该值作为下表存入哈希数组,给一个自定义的值
    obj[arr[i]] = 1;
    }
    }
    return r;
    }


    /*function unique4(arr){
    // 给arr排序
    arr.sort(function(a,b){return a-b})
    // 遍历数组
    for(var i = 1; i < arr.length; i++){
    // 如果当前值等于了前面的那个值
    if(arr[i] === arr[i-1]){
    // 删除这个值
    arr.splice(i,1);
    // 因为删除了一个值,需要让循环向前移动一次
    i--;
    }
    }
    return arr;
    }*/


    /*function unique5(arr){
    // 遍历数组
    for(var i = 0; i < arr.length; i++){
    // 遍历数组寻找与arr当前值相等的值
    for(var j = i + 1; ; ){
    // j记录找到的下标
    j = arr.indexOf(arr[i], j);
    // 如果j为-1了,代表后面没有相同的值了
    if(j == -1){
    break;
    }
    // 删除这个值
    arr.splice(j, 1);
    }
    }
    return arr;
    }*/


    function unique6(arr){
    // ES6新语法
    return new Set(arr);
    }

    var arr = [5,4,9,1,6,8,7,5,4,2,4,5,6,4,2,6,4,2,1,5,9]
    // 测试
    console.log(unique1(arr));
    console.log(unique2(arr));
    console.log(unique3(arr));
    // console.log(unique4(arr));
    // console.log(unique5(arr));
    console.log(unique6(arr));
    // 效率测试
    for(var i = 0, arrtest = []; i < 10000; i++){
    // 随机往数组里面添加10000个数据
    arrtest[i] = Math.ceil(Math.random()*100)
    }


    console.time("unique1");
    unique1(arrtest);
    console.timeEnd("unique1");
    console.time("unique2");
    unique2(arrtest);
    console.timeEnd("unique2");
    console.time("unique3");
    unique3(arrtest);
    console.timeEnd("unique3");
    /*console.time("unique4");
    unique4(arrtest);
    console.timeEnd("unique4");*/
    /*console.time("unique5");
    unique5(arrtest);
    console.timeEnd("unique5");*/
    console.time("unique6");
    unique6(arrtest);
    console.timeEnd("unique6");
    </script>
    </body>
    </html>

  • 相关阅读:
    Nginx系列p5:进程管理(信号)
    Nginx系列p4:进程结构
    one_day_one_linuxCmd---crontab 命令
    Nginx系列p3:实现一个具有缓存功能的反向代理服务器
    Nginx系列p2:重载,热部署,日志分割
    Nginx系列p1:安装
    数据链路层
    物理层习题与真题
    物理层
    计算机网络体系结构习题与真题
  • 原文地址:https://www.cnblogs.com/awei313558147/p/11537194.html
Copyright © 2011-2022 走看看