76

IEnumerable.Any(Predicate<T>)JavaScriptまたはjQueryに相当するものはありますか?

アイテムのリストを検証していますが、エラーが検出された場合は早期に中断したいと思います。を使用してそれを行うことはできます$.eachが、アイテムが実際に見つかったかどうかを確認するには、外部フラグを使用する必要があります。

var found = false;
$.each(array, function(i) {
    if (notValid(array[i])) {
        found = true;
    }
    return !found;
});

より良い方法は何でしょうか?for値だけでなくすべてのメンバーを反復処理するため、JavaScript配列でプレーンを使用するのは好きではありません。

4

8 に答える 8

109

最近では、実際にArray.prototype.some(ES5で仕様)を使用して同じ効果を得ることができます:

array.some(function(item) {
    return notValid(item);
});
于 2014-05-02T01:58:57.557 に答える
18

is述語を受け入れるjQuery 関数のバリアントを使用できます。

$(array).is(function(index) {
    return notValid(this);
});
于 2011-05-10T13:19:46.160 に答える
4

シオンの答えは正しいです。彼の答えを拡張するには:

jQuery.is(function)は .NET と同じ動作をしますIEnumerable.Any(Predicate<T>)

http://docs.jquery.com/isから:

式に対して現在の選択をチェックし、選択の少なくとも 1 つの要素が指定された式に適合する場合は true を返します。

于 2011-07-21T17:33:15.620 に答える
3

配列要素のみをループする通常のforループ ( ではない) を使用する必要があります。for ... in

于 2011-05-10T13:17:00.413 に答える
3

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

于 2016-09-05T14:55:58.747 に答える
1

JavaScriptfor 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);
}
于 2011-05-10T14:47:15.997 に答える
0

メソッドを使用することをお勧めします$.grep()。それは非常に近いIEnumerable.Any(Predicate<T>)です:

$.grep(array, function(n, i) {
  return (n == 5);
});

ここに実用的なサンプルがあります: http://jsfiddle.net/ErickPetru/BYjcu/ .

2021 アップデート

この回答は 10 年以上前に投稿されたものであるため、次のことを強調することが重要です。

  1. それが公開されたとき、これは完全に理にかなった解決策でした。当時、この問題を 1 回の関数呼び出しで解決するネイティブな JavaScript はなかったからです。
  2. 元の質問には jQuery タグが含まれているため、jQuery ベースの回答が期待されるだけでなく、必須です。そのための反対票はまったく意味がありません。
  3. それ以来、JavaScript の世界は大きく進化したため、jQuery に行き詰まっていない場合は、最新のソリューションを使用してください。これは歴史的な目的のためにここにあり、レガシーコードを扱うときに誰かがまだ役に立つかもしれない古いニーズの参照として保持されます.
于 2011-05-10T13:30:21.863 に答える