4

FieldAjax 呼び出しの返された結果からすべての一意の名前を取得しようとしています。しかし、どういうわけか、そのField名前DRMroleは引き続き 2 回表示されます。

これが私が使用しているjQueryです

//Construct array to determine unique Field names
var fieldArray = [];
$.each(data, function(i, item){
    fieldArray.push(item.Field);
    console.log(item.Field);
});
fieldArray = $.unique(fieldArray);
console.log(fieldArray);

そして、ここにconsole.logコマンドからの読み出しがあります

ここに画像の説明を入力

ご覧のとおり、何らかの理由DRMroleで、フィルター処理された結果に 2 回表示されます。これは、このコードを実行するたびに発生するため、ランダムではないようです。

4

3 に答える 3

14

配列の代わりに常にオブジェクトを使用できます。各項目をオブジェクトのプロパティとして配置します。挿入しようとした同一の各キーは、既存のキーを単純にオーバーライドします。

var fieldArray = {}; // object instead of array
$.each(data, function(i, item){
    fieldArray[item.Field] = item.Field;
});

これはjsFiddleの非常に単純な例です


別のオプション ( sbeliv01によるコメントで言及されているように) は、関数を使用して、要素が既に存在するかどうかをテストすることです。$.inArray()

var fieldArray = [];
$.each(data, function(i, item){
  if ($.inArray(item.Field,fieldArray) === -1){
    fieldArray.push(item.Field);
  }
});

参照 -$.inArray()

于 2013-05-10T21:44:49.403 に答える
1

「一意化」したい配列がすでにある場合の別のオプション

Array.prototype.getUnique = function(){
   var u = {}, a = [];
   for(var i = 0, l = this.length; i < l; ++i){
      if(u.hasOwnProperty(this[i])) {
         continue;
      }
      a.push(this[i]);
      u[this[i]] = 1;
   }
   return a;
}
于 2013-05-10T21:57:25.383 に答える
-3

var x = [2, 3, 6, 3, 2, 5];

x = x.filter(function(a,b,c){ return c.indexOf(a,- c.length) >= b ? true :false ; });

于 2014-10-28T17:54:33.663 に答える