JavaScriptまたはjQueryにIEnumerable.Any(Predicate<T>)
に相当するものはありますか?
アイテムのリストを検証していますが、エラーが検出された場合は早期に中断したいと考えています。 $.each
、しかし、アイテムが実際に見つかったかどうかを確認するには、外部フラグを使用する必要があります。
var found = false;
$.each(array, function(i) {
if (notValid(array[i])) {
found = true;
}
return !found;
});
より良い方法は何でしょうか?単純なfor
をJavaScript配列で使用するのは好きではありません。値だけでなく、すべてのメンバーを反復処理するからです。
最近、あなたは実際に使うことができます Array.prototype.some
(ES5で規定)同じ効果を得るには:
array.some(function(item) {
return notValid(item);
});
述語を受け入れるjQueryのバリアント is
関数を使用できます。
$(array).is(function(index) {
return notValid(this);
});
配列要素のみをループする通常のfor
ループ(for ... in
ではなく)を使用する必要があります。
Xionの答えは正しいです。彼の答えをさらに詳しく説明します。
jQueryの.is(function)
は、.NETのIEnumerable.Any(Predicate<T>)
と同じ動作をします。
から http://docs.jquery.com/is :
現在の選択を式に対してチェックし、選択の少なくとも1つの要素が指定された式に適合する場合はtrueを返します。
JavaScriptを試すことをお勧めしますfor in
ループ。ただし、構文は.net IEnumerable
で得られるものとはかなり異なることに注意してください。以下は、コード例の小さなサンプルです。
var names = ['Alice','Bob','Charlie','David'];
for (x in names)
{
var name = names[x];
alert('Hello, ' + name);
}
var cards = { HoleCard: 'Ace of Spades', VisibleCard='Five of Hearts' };
for (x in cards)
{
var position = x;
var card = card[x];
alert('I have a card: ' + position + ': ' + card);
}
すべてのC#LINQメソッドを実装する https://www.npmjs.com/package/manipula を使用すると、次のようになります。
Manipula.from([0,1]).any(x=>x>0)
あなたはarray.filterを使用するかもしれません(IE 9+詳細については以下のリンクを参照してください)
[].filter(function(){ return true|false ;}).length > 0;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
$.grep()
メソッドを使用することをお勧めします。 IEnumerable.Any(Predicate<T>)
に非常に近い:
$.grep(array, function(n, i) {
return (n == 5);
});
ここであなたに働くサンプル: http://jsfiddle.net/ErickPetru/BYjcu/ 。