34

可能重复:在字符串数组上
的 JavaScript 数组
jQuery.unique中查找重复值的最简单方法

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

thelist=["ball_1","ball_13","ball_23","ball_1"]

当然也有重复。

我试图用 jQuery.unique(); 删除它们。但我猜它不适用于字符串,所以有什么办法(使数组唯一)吗?

谢谢你的帮助..

4

5 回答 5

75

jQueryunique方法仅适用于 DOM 元素数组。

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

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/

于 2012-09-23T10:51:07.830 回答
12

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

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"]

[编辑 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) );

于 2012-09-23T10:56:50.667 回答
9

试试这个 - 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()
于 2012-09-23T10:42:55.817 回答
2

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

增强的独特性

于 2012-09-23T10:49:16.103 回答
2

array_unique这里有一个 PHP函数的 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)
于 2012-09-23T10:42:31.693 回答