web-dev-qa-db-ja.com

jQuery-文字列の配列から重複を削除します

可能性のある複製:
JavaScript配列で重複する値を見つける最も簡単な方法
文字列の配列に対するjQuery.unique

幅優先検索で隣接リストを取得しようとしています(具体的には Block'd の同じ色の隣接ボールのインデックス)function getWholeList(ballid)は次のような配列を返します

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

そしてもちろん、重複があります。

JQuery.unique()でそれらを削除しようとしました。しかし、それは私が推測する文字列では機能しないので、これには何か方法がありますか(配列を一意にする)?

助けてくれてありがとう。

31
void

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/

65
Guffa

Jquery以外のソリューションとして、次のようにArrays 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の見解は次のとおりです。

Array.from(["ball_1","ball_13","ball_23","ball_1"]
           .reduce( (a, b) => a.set(b, b) , new Map()))
     .map( v => v[1] );
10
KooiInc

これを試してください- 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()
8
white

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

拡張された一意

2
obe6

PHP array_unique関数: 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)
2
Petah