zoukankan      html  css  js  c++  java
  • 高效率去掉js数组中重复项

    Array类型并没有提供去重复的方法,如果要把数组的重复元素干掉,那得自己想办法:

     function unique(arr) {
          var result = [], isRepeated;
          for (var i = 0, len = arr.length; i < len; i++) {
              isRepeated = false;
              for (var j = 0, len = result.length; j < len; j++) {
                  if (arr[i] == result[j]) {   
                      isRepeated = true;
                      break;
                  }
             }
             if (!isRepeated) {
                 result.push(arr[i]);
             }
         }
         return result;
    }

    总体思路是把数组元素逐个搬运到另一个数组,搬运的过程中检查这个元素是否有重复,如果有就直接丢掉。从嵌套循环就可以看出,这种方法效率极低。我们可以 用一个hashtable的结构记录已有的元素,这样就可以避免内层循环。恰好,在JavaScript中实现hashtable是极为简单的,改进如 下:

    function unique(arr) {
        var result = [], hash = {};
        for (var i = 0, len=arr.length; i<len; i++) {
            if (!hash[arr[i]]) {
           hash[arr[i]] = true; result.push(arr[i]);
    } } return result; }

    一句话去重:[...new Set([1,2,3,4,2,"a","b"])]

     感谢南瓜huh提出的宝贵意见

  • 相关阅读:
    Codeforces Round #398 (Div. 2) B,C
    KMP模板
    HDU1711 KMP(模板题)
    HDU3265 线段树(扫描线)
    HDU2795 线段树
    HDU1828线段树(扫描线)
    HDU1832 二维线段树求最值(模板)
    HDU1698 线段树(区间更新区间查询)
    HDU3251 最大流(最小割)
    cf2.c
  • 原文地址:https://www.cnblogs.com/sghy/p/7364980.html
Copyright © 2011-2022 走看看