私のコードは次のようなものです:
var arr = [];
arr.Push(item1,item2);
arr
には次のように含まれます:["name"、 "thing1"]
しかし、同じ正確な値を持つ要素をプッシュすると問題が発生しました。同じ要素値をフィルタリングしながら更新/変更を受け入れる方法はありますか。 [〜#〜] jsfiddle [〜#〜]
見つからない場合は-1を返すarr.indexOf
を使用できます。その場合は追加できます。
例えば.
if (arr.indexOf(item) == -1) {
arr.Push(item);
}
ただし、これは古いブラウザでは機能しません...
JQueryには、非常に古いブラウザでも、すべてのブラウザで機能するメソッド($.indexOf
)があります。
ジャバスクリプトだけで十分です。
配列にアイテムが含まれている場合、そのインデックスは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
}
ほとんどの答えが指摘しているように、Array.prototype.indexOf()
メソッドを使用して、値が存在するかどうかを判断できます。これを確認するには、ng-change()
イベントコールバック内のng-models
valueプロパティ、selects.value
に対して文字列の配列を確認します。
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>
Angular Filters を使用する必要があります。
いくつかの実装は、同様の質問に対する答えとして見つけることができます: ng-repeatが重複した結果を除外する方法