JavaScript / jQuery相当于LINQ Any()

在JavaScript或jQuery中是否有相当于IEnumerable.Any(Predicate<T>)

我正在validation项目列表,并希望如果检测到错误提前中断。 我可以使用$.each ,但是我需要使用一个外部标志来查看是否真的find了这个项目:

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

什么是更好的方法? 我不喜欢在JavaScript数组中使用plain for因为它遍历所有成员,而不仅仅是值。

现在你实际上可以使用Array.prototype.some (在ES5中指定)获得相同的效果:

 array.some(function(item) { return notValid(item); }); 

你可以使用jQuery的变体is接受谓词的函数:

 $(array).is(function(index) { return notValid(this); }); 

锡安的答案是正确的。 为了扩大他的答案:

jQuery的.is(function)具有与.NET的IEnumerable.Any(Predicate<T>)相同的行为。

http://docs.jquery.com/is

如果select的至less一个元素符合给定的expression式,则检查当前select是否符合expression式并返回true。

你应该使用一个普通for循环(不适for ... in ),这将只循环数组元素。

我build议你使用$.grep()方法。 它非常接近IEnumerable.Any(Predicate<T>)

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

这里给你一个工作示例: http : //jsfiddle.net/ErickPetru/BYjcu/ 。

我build议你for in循环中尝试JavaScript。 但是请注意,语法与使用.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); } 

你可以使用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