2012-03-09 19 views
8

Usando jQuery, ¿cómo iterar a través de una matriz de objetos y devolver el que cumple con ciertos criterios?jQuery: ¿Cómo encontrar un objeto con una propiedad determinada es igual a un cierto valor?

+1

Esto depende completamente de qué objetos son y cuál es la condición. Necesitamos algunos datos de muestra. –

+0

¿Qué estás tratando de hacer? ¿Puedes publicar algún código> – elclanrs

+0

? Cada objeto tiene propiedades de ID y cantidad. Una matriz contiene una docena o más de objetos. – David

Respuesta

14

Usted puede utilizar la función jQuery grep:

var matches = jQuery.grep(array, function(item) { 
    // this is a reference to the element in the array 
    // you can do any test on it you want 
    // return true if you want it to be in the resulting matches array 
    // return false if you don't want it to be in the resulting matches array 

    // for example: to find objects with the Amount property set to a certain value 
    return(item.Amount === 100); 
}); 
// matches contains all objects that matches 
if (matches.length) { 
    // first match is in matches[0] 
} 

Si su condición que desea probar es distinta de una igualdad estricta nada, entonces usted tendrá que utilizar algún tipo de matriz de iteración que ejecuta su comparación personalizada . Puede hacerlo con .each() o con .grep() dependiendo del tipo de salida que desee.

Si su condición era una igualdad estricta, podría usar jQuery.inArray().

Obviamente, no necesita jQuery para esto, ya que podría simplemente iterar a través de la matriz en javascript simple e implementar cualquier prueba que desee. Una ventaja de utilizar JavaScript simple es que puedes salirte de la iteración cuando encuentras el resultado que deseas.

en JavaScript normal:

for (var i = 0, len = array.length; i < len; i++) { 
    if (array[i].Price === 100) { 
     // match is in array[i] 
     break; 
    } 
} 
+0

Bueno, esto se puede implementar de manera similar como 'Listas genéricas/lambda .Where (n => ...)' en C# – Pierre

+0

De acuerdo con la documentación de jQuery '' 'this''' está vinculado al objeto de ventana global, no al ít. El artículo es el primer parámetro de esa función. – Andy

+0

@Andy - Thx - Lo corregí. – jfriend00

1
$([1,2,2,4]).filter(function(i,n){return n==2;}); 

Esto devolverá tanto 2 de

básicamente la matriz puede ser una matriz de elementos DOM o cualquier matriz de hecho, si se trata de una matriz devuelta por una Selector jQuery puedes hacer algo como

$('div.someClass').filter(function(){return $(this).hasClass('someOtherClass')}) 

solo para eg-> esto devolverá todos los divs que ja ve tanto algunaClase y someOtherClass (nota: hay otras maneras de hacer esto)

actualización como por su comentario, puede hacerlo

$(yourArray).filter(function(i,n){return n.Amount && n.Amount == conditionValue;}); 
0

Usted realmente no necesita jQuery para hacer lo que necesita:

var objects = [{id:23, amount:232}, {id:42, amount: 3434}, ...] 

// the function which finds the object you want, pass in a condition function 
function findObject(objectMeetsCondition){ 
    for(var i = 0 ; i < objects.length ; i++){ 
     if(objectMeetsCondition(objects[i])) return objects[i]; 
    } 
} 

// your custom condition that determines whether your object matches 
function condition(obj){ 
    return obj.amount == 3434; 
} 

findObject(condition); // returns {id:42,amount:3434} 
Cuestiones relacionadas