【问题标题】:Remove similar elements in array of numbers [duplicate]删除数字数组中的相似元素[重复]
【发布时间】:2010-09-10 14:15:48
【问题描述】:

我有一个数字数组,例如:[1, 4, 7, 1, 2, 1, 3, 1, 4]

我想删除重复元素并对结果进行排序,即要求的结果是:
[1, 2, 3, 4, 7]

是否有任何内置的 Javascript/jQuery 函数可以做到这一点,或者我必须自己编写?

【问题讨论】:

    标签: javascript jquery arrays unique


    【解决方案1】:

    不,没有任何内置功能。另外,您需要注意默认排序是词法的,所以[9, 1, 10].sort() 将返回[1, 10, 9]

    以下内容将对数字数组中的重复项进行排序和删除:

    function sortAndRemoveDuplicates(arr) {
        arr.sort( function(a, b) { return a - b; } );
        var copy = arr.slice(0);
        arr.length = 0;
    
        for (var i = 0, len = copy.length; i < len; ++i) {
            if (i == 0 || copy[i] != copy[i - 1]) {
                arr.push(copy[i]);
            }
        }
        return arr;
    }
    
    var arr = [1, 4, 7, 1, 2, 1, 3, 10, 1, 4, 10];
    sortAndRemoveDuplicates(arr);
    console.log(arr); // [1, 2, 3, 4, 7, 10]
    

    【讨论】:

      【解决方案2】:

      Underscore library 非常适合所有这些技巧;我喜欢它,没有它就活不下去!!

      一旦你声明了它,你就可以使用下划线来调用它的函数,像这样:

      _.uniq([1, 4, 7, 1, 2, 1, 3, 1, 4]);
      => [1, 4, 7, 2, 3]
      

      如果你想要它排序:

      _.uniq([1, 4, 7, 1, 2, 1, 3, 1, 4]).sort();
      => [1, 2, 3, 4, 7]
      

      从上面链接的页面:

      “Underscore 提供了 60 多种函数,它们支持常见的功能怀疑:map、select、invoke — 以及更专业的帮助器:函数绑定、javascript 模板、深度相等测试等。”

      【讨论】:

      • +1 for Underscore -- 但是如果 OP 要求一个 javascript 函数来做 uniq 所做的事情,为什么不把它拉出​​来解决他的问题,然后指出所有这些和更多可以在图书馆找到? :-)
      • 嗯... _.uniq 使用 _.reduce 而使用 _.each... 这不是很明确...
      【解决方案3】:
      Array.prototype.unique = function(){
          for(var i = 0; i < this.length; i++){
              if( this.indexOf(this[i], i+1) != -1 ){
                  this.splice(i,1);
                  i--;
              }
          }
          return this.sort();
      }
      
      var x = [1,'x', 4, 7, 1, 2, 1,'x', 3, 1, 4];
      x.unique() // [1, 2, 3, 4, 7, "x"]
      

      【讨论】:

        【解决方案4】:

        从 JavaScript 1.6 开始,array.filter() 可用于删除重复值:

        [1, 4, 7, 1, 2, 1, 3, 1, 4]
            .filter(function (value, index, self) {
                return self.indexOf(value) === index;
        });
        

        返回

        [1, 4, 7, 2, 3]
        

        过滤器的好处是它适用于数组中的所有值类型:

        [1, "d", 4, "e", 7, "e", 1, "a", 2, "d", 1, "b", 3, "c", 1, "e", 4]
            .filter(function (value, index, self) {
                return self.indexOf(value) === index;
            });
        

        返回

        [1, 2, 3, 4, 7, "a", "b", "c", "d", "e"]
        

        【讨论】:

          猜你喜欢
          • 2017-04-27
          • 2014-01-31
          • 2015-07-07
          • 2011-03-22
          • 1970-01-01
          • 2013-05-20
          • 2013-03-23
          相关资源
          最近更新 更多