【问题标题】:jQuery - remove duplicates from an array of strings [duplicate]jQuery - 从字符串数组中删除重复项[重复]
【发布时间】:2012-09-15 02:55:46
【问题描述】:

可能重复:
Easiest way to find duplicate values in a JavaScript array
jQuery.unique on an array of strings

我正在尝试通过广度优先搜索获取邻居列表(具体而言:Block'd 中相同颜色邻居球的索引) 我的function getWholeList(ballid) 返回一个类似

的数组
thelist=["ball_1","ball_13","ball_23","ball_1"]

当然还有重复。

我尝试使用 jQuery.unique(); 删除它们但我猜它不适用于字符串, 那么有什么办法(使数组独一无二)吗?

感谢您的帮助..

【问题讨论】:

标签: javascript jquery arrays string unique


【解决方案1】:

jQuery unique method 仅适用于 DOM 元素数组。

您可以使用each 和inArray 方法轻松创建自己的uniqe 函数:

function unique(list) {
  var result = [];
  $.each(list, function(i, e) {
    if ($.inArray(e, result) == -1) result.push(e);
  });
  return result;
}

演示:http://jsfiddle.net/Guffa/Askwb/

【讨论】:

  • 使用grep也不错:function unique(list) { return $.grep(list, function(n, i) { return list.indexOf(n) == i; }); }
【解决方案2】:

作为非 jquery 解决方案,您可以像这样使用数组filter 方法:

var thelist=["ball_1","ball_13","ball_23","ball_1"], 
    thelistunique = thelist.filter(
                 function(a){if (!this[a]) {this[a] = 1; return a;}},
                 {}
                );
//=> thelistunique = ["ball_1", "ball_13", "ball_23"]

作为Array.prototype 的扩展(使用缩短的filter 回调)

Array.prototype.uniq = function(){
  return this.filter(
      function(a){return !this[a] ? this[a] = true : false;}, {}
  );
}
thelistUnique = thelist.uniq(); //=> ["ball_1", "ball_13", "ball_23"]

[Edit 2017] ES6 对此的看法可能是:

const unique = arr => [...new Set(arr)];
const someArr = ["ball_1","ball_13","ball_23","ball_1", "ball_13", "ball_1" ];
console.log( unique(someArr) );

【讨论】:

    【解决方案3】:

    试试这个 - Array.unique()

    Array.prototype.unique =
      function() {
        var a = [];
        var l = this.length;
        for(var i=0; i<l; i++) {
          for(var j=i+1; j<l; j++) {
            // If this[i] is found later in the array
            if (this[i] === this[j])
              j = ++i;
          }
          a.push(this[i]);
        }
        return a;
      };
    thelist=["ball_1","ball_13","ball_23","ball_1"]
    thelist=thelist.unique()
    

    【讨论】:

    • 不要在大型​​数组上尝试这个,这有二次复杂度
    • 这不是也对数组进行排序吗?有时这是不需要的
    【解决方案4】:

    jQuery.unique() 仅适用于 DOM 元素数组。看看这个(unique的增强版):

    Enhanced unique

    【讨论】:

      【解决方案5】:

      这里有一个 PHP array_unique 函数的 JavaScript 端口:http://phpjs.org/functions/array_unique

      function array_unique (inputArr) {
          var key = '',
              tmp_arr2 = {},
              val = '';
      
          var __array_search = function (needle, haystack) {
              var fkey = '';
              for (fkey in haystack) {
                  if (haystack.hasOwnProperty(fkey)) {
                      if ((haystack[fkey] + '') === (needle + '')) {
                          return fkey;
                      }
                  }
              }
              return false;
          };
      
          for (key in inputArr) {
              if (inputArr.hasOwnProperty(key)) {
                  val = inputArr[key];
                  if (false === __array_search(val, tmp_arr2)) {
                      tmp_arr2[key] = val;
                  }
              }
          }
      
          return tmp_arr2;
      }
      

      或者以后的JS:

      arr.filter((v, p) => arr.indexOf(v) == p)
      

      【讨论】:

        猜你喜欢
        • 2014-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多