• 数组去重的6种方法


    1.双重循环遍历

    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;
    }

    2.使用哈希数组的方式

    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;
    }

    3.对象

    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;
    }

    4.先给数组排序

    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;
    }

    5.通过下标

    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;
    }

    6.

    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]

  • 相关阅读:
    等式
    Lemon 评测软件用法
    同花顺
    浅谈二分图的最大匹配和二分图的KM算法
    LCT总结
    5.30模拟赛
    树上斜率优化
    5.22 noip模拟赛
    KMP,HASH,Trie,AC自动机
    splay总结
  • 原文地址:https://www.cnblogs.com/hyh888/p/11502860.html
Copyright © 2020-2023  润新知