2011-11-29 23 views
39

Tengo objetos JSON que tienen varias propiedades, como una identificación y un nombre. Los guardo en una matriz de JavaScript y luego, en base a una lista desplegable, quiero recuperar el objeto de la matriz de JavaScript en función de su id.Seleccionar de una matriz de objetos según el valor de la propiedad en JavaScript

Supongamos que un objeto tiene identificación y nombre, ¿cómo los selecciono de mi variable de matriz?

var ObjectsList = data; 
var id = $("#DropDownList > option:selected").attr("value"); 
ObjectsList["id=" + id]; 
+0

Es necesario para mostrar los datos JSON real que usted está tratando de elegir con el fin de que seamos capaces de aconsejar cómo acceder a ella . – jfriend00

Respuesta

57

Como usted ya tiene jQuery, podría utilizar $.grep:

encuentra los elementos de una matriz que cumplen una función de filtro. La matriz original no se ve afectada.

Así que algo como esto:

var matches = $.grep(ObjectsList, function(e) { return e.id == id }); 

que le dejará con una serie de elementos coincidentes de ObjectsList en la matriz matches. Lo anterior asume que ObjectsList tiene una estructura como esta:

[ 
    { id: ... }, 
    { id: ... }, 
    ... 
] 

Si sabe que sólo hay una coincidencia o si sólo desea que el primero, entonces podría hacerlo de esta manera:

for(var i = 0, m = null; i < ObjectsList.length; ++i) { 
    if(ObjectsList[i].id != wanted_id) 
     continue; 
    m = a[i]; 
    break; 
} 
// m is now either null or the one you want 

Hay hay muchas variaciones en el enfoque de bucle for y muchas personas me señalan porque creen que continue es una mala palabra; si no te gusta continue entonces usted podría hacerlo de esta manera:

for(var i = 0, m = null; i < ObjectsList.length; ++i) { 
    if(ObjectsList[i].id == wanted_id) { 
     m = ObjectsList[i]; 
     break; 
    } 
} 
+3

Esto hizo el truco solo tenía que poner [0] al final para seleccionar el primer elemento de la nueva matriz que coincida con el filtro. – sergioadh

Cuestiones relacionadas