JS有没有比较高效的数组去重的方法?

JS数据去重的方法至少有五六种,只是时间复杂度和空间复杂度都不尽人意,有没有比较高效的数组去重的方法?

阅读 13.2k
评论 2017-08-30 提问
    7 个回答

    你都知道5 6种方法了。。。

    我只知道3种。。。

    不过我觉得有一种是比较巧妙的:
    先创建一个对象,然后遍历一次数组,把数组的元素的值作为对象的属性名,并且设置值为true

    比方
    var arr = [1, 3, 3, 1, 5, 2, 1]
    你可以得到这样的一个对象
    a = { "1": true, "3": true, "5": true, "2": true }
    然后你再把对象转变成一个新数组

    如果在数组元素较多的情况下,这种方法循环的次数应该是最少的吧

    评论 赞赏 2017-08-30
      micherwa
      • 5.1k

      用es6的Set对象呗

      var arr = [1,2,3,3,4,5,5];
      var set = new Set(arr);
      var newArr = Array.from(set);
      评论 赞赏 2017-08-31

        Array.prototype.myfilter=function(index){

             var obj={};
             return this.filter(function(item){
                obj[item]=obj[item]||0;
                return obj[item]++<index;
             });

        }
        循环次数为n;
        针对数组保存数据为非对象数据的去重;
        参数index表示删除重复index次数的数据;

        评论 赞赏 2017-08-31
          forGit
          • 156

          感觉这种蛮简单的

          [...new Set([1,1,21,5,4,4,4,4])]
          评论 赞赏 2017-08-31

            哈希算法去重

            Array.prototype.unique = function() {
                // n为hash表,r为临时数组
                var n = {}, r = [];
                for (var i = 0; i < this.length; i++) {
                    // 如果hash表中没有当前项
                    if (!n[this[i]]) {
                        // 存入hash表
                        n[this[i]] = true;
                        // 把当前数组的当前项push到临时数组里面
                        r.push(this[i]); 
                    }
                }
                return r;
            }

            可以参考一下这个博客JS数组去重

            评论 赞赏 2017-08-31
              码徒
              • 276
              [...new Set(Arr)]
              评论 赞赏 2017-08-31

                new {} ,set array[k]作为{}的key值

                评论 赞赏 2017-08-31
                  撰写回答

                  登录后参与交流、获取后续更新提醒