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>)
相同的行为。
如果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