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メソッドと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

filterjquery 以外のソリューションとして、次のように 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

ここに PHParray_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)
于 2012-09-23T10:42:31.693 に答える
2

jQuery.unique() は、DOM 要素の配列に対してのみ機能します。これを見てください(ユニークの拡張版):

強化されたユニーク

于 2012-09-23T10:49:16.103 に答える