No sé por qué cada uno() no funciona para usted:
ROTO - ver FIX ABAJO
function check(arr, closure)
{
$.each(arr,function(idx, val){
// Note, two options are presented below. You only need one.
// Return idx instead of val (in either case) if you want the index
// instead of the value.
// option 1. Just check it inline.
if (val['Foo'] == 'Bar') return val;
// option 2. Run the closure:
if (closure(val)) return val;
});
return -1;
}
ejemplo adicional para comentarios Op.
Array.prototype.UContains = function(closure)
{
var i, pLen = this.length;
for (i = 0; i < pLen; i++)
{
if (closure(this[i])) { return i; }
}
return -1;
}
// usage:
// var closure = function(itm) { return itm.Foo == 'bar'; };
// var index = [{'Foo':'Bar'}].UContains(closure);
Ok, mi primer ejemplo es HORKED. Señalado a mí después de unos 6 meses y múltiples votaciones ascendentes. :)
correctamente, cheque() debe tener este aspecto:
function check(arr, closure)
{
var retVal = false; // Set up return value.
$.each(arr,function(idx, val){
// Note, two options are presented below. You only need one.
// Return idx instead of val (in either case) if you want the index
// instead of the value.
// option 1. Just check it inline.
if (val['Foo'] == 'Bar') retVal = true; // Override parent scoped return value.
// option 2. Run the closure:
if (closure(val)) retVal = true;
});
return retVal;
}
La razón aquí es bastante simple ... el alcance de la declaración era simplemente incorrecto.
Al menos la versión de prototipo de objeto (la que realmente comprobé) funcionó.
Gracias Crashalot. Mi error.
Podría ser yo, pero ¿hay algún código específico de jQuery en su ejemplo? – gnur
¿Solo desea el índice o el objeto en sí? –
Quiero el índice, creo que puedo obtener el objeto con grep. – Daniel