javascript - tag - title of page html
JavaScript/jQuery equivalente de LINQ Any() (7)
Debería usar un bucle for
ordinario (no for ... in
), que solo recorrerá los elementos de la matriz.
¿Hay un equivalente de IEnumerable.Any(Predicate<T>)
en JavaScript o jQuery?
Estoy validando una lista de elementos, y quiero romper antes si se detecta un error. Podría hacerlo usando $.each
, pero necesito usar una $.each
externa para ver si realmente se encontró el elemento:
var found = false;
$.each(array, function(i) {
if (notValid(array[i])) {
found = true;
}
return !found;
});
¿Cuál sería una mejor manera? No me gusta usar solo for
arreglos de JavaScript porque itera sobre todos sus miembros, no solo los valores.
En estos días, realmente podría usar Array.prototype.some
(especificada en ES5) para obtener el mismo efecto:
array.some(function(item) {
return notValid(item);
});
La respuesta de Xion es correcta. Para ampliar sobre su respuesta:
.is(function)
jQuery tiene el mismo comportamiento que IEnumerable.Any(Predicate<T>)
.NET.
De http://docs.jquery.com/is :
Compara la selección actual con una expresión y devuelve verdadero, si al menos un elemento de la selección se ajusta a la expresión dada.
Le sugiero que pruebe el JavaScript for in
loop. Sin embargo, tenga en cuenta que la sintaxis es bastante diferente a la que obtiene con un .net IEnumerable
. Aquí hay un pequeño ejemplo de código ilustrativo.
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);
}
Podría usar la variante de jQuery, is
función que acepta un predicado:
$(array).is(function(index) {
return notValid(this);
});
Puede usar array.filter (IE 9+ vea el enlace a continuación para obtener más detalles)
[].filter(function(){ return true|false ;}).length > 0;
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Te sugiero que uses el $.grep()
. Está muy cerca de IEnumerable.Any(Predicate<T>)
:
$.grep(array, function(n, i) {
return (n == 5);
});
Aquí una muestra de trabajo para usted: http://jsfiddle.net/ErickPetru/BYjcu/ .