web-dev-qa-db-ja.com

angularjsの配列プッシュでの重複を防ぐ方法

私のコードは次のようなものです:

var arr = [];
arr.Push(item1,item2);

arrには次のように含まれます:["name"、 "thing1"]

しかし、同じ正確な値を持つ要素をプッシュすると問題が発生しました。同じ要素値をフィルタリングしながら更新/変更を受け入れる方法はありますか。 [〜#〜] jsfiddle [〜#〜]

24
Azizi Musa

見つからない場合は-1を返すarr.indexOfを使用できます。その場合は追加できます。

例えば.

if (arr.indexOf(item) == -1) {
    arr.Push(item);
}

ただし、これは古いブラウザでは機能しません...

JQueryには、非常に古いブラウザでも、すべてのブラウザで機能するメソッド($.indexOf)があります。

42
xxmicloxx

ジャバスクリプトだけで十分です。

配列にアイテムが含まれている場合、そのインデックスは0以上です

index == -1の場合、これを行うことができます。アイテムが配列に存在しないため、一意のアイテムをプッシュできます

if(arr.indexOf(item) == -1) {
   arr.Push(item);
}

編集:番号を変更するように要求されました。これが方法です

var index = arr.indexOf(item);
if(index > -1) { //checking if item exist in array
  arr[index]++;   // you can access that element by using arr[index], 
                 // then change it as you want, I'm just incrementing in above example
}
9
Vamsi

ほとんどの答えが指摘しているように、Array.prototype.indexOf()メソッドを使用して、値が存在するかどうかを判断できます。これを確認するには、ng-change()イベントコールバック内のng-models valueプロパティ、selects.valueに対して文字列の配列を確認します。

[〜#〜] demo [〜#〜]

Javascript

$scope.goChange = function(name, value){
  if(!~arr.indexOf(value)) {
          arr.Push(name, value);
          console.log(arr);
  }
};

[〜#〜] html [〜#〜]

<select ng-model="selects" ng-change="goChange(item.name, selects.value)" ng-options="i as i.value for i in options">
  <option value=""></option>
</select>
2
ryeballar

Angular Filters を使用する必要があります。

いくつかの実装は、同様の質問に対する答えとして見つけることができます: ng-repeatが重複した結果を除外する方法

1
gmanolache