2011-11-29 12 views
39

Ho oggetti JSON che hanno diverse proprietà come un id e un nome. Li memorizzo in un array JavaScript e poi in base a un elenco a discesa voglio recuperare l'oggetto dall'array JavaScript basato sul suo id.Seleziona dalla matrice di oggetti in base al valore della proprietà in JavaScript

Supponiamo che un oggetto abbia ID e nome, come selezionarli dalla variabile di array?

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

Hai bisogno di mostrare i dati effettivi JSON che si sta cercando di scegliere in modo per noi essere in grado di consigliare come accedervi . – jfriend00

risposta

57

Poiché si dispone già di jQuery, è possibile utilizzare $.grep:

trova gli elementi di una matrice che soddisfano una funzione di filtro. L'array originale non è interessato.

Quindi qualcosa di simile:

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

che vi lascerà con una serie di voci corrispondenti da ObjectsList nella matrice matches. Quanto sopra presuppone che ObjectsList ha una struttura come questa:

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

Se si sa che esiste una sola partita o se si desidera solo il primo allora si potrebbe fare in questo modo:

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 

Ci ci sono un sacco di variazioni sull'approccio del ciclo for e un sacco di persone mi agitano un dito perché pensano che continue sia una parolaccia; se non vi piace continue allora si potrebbe fare in questo modo:

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

Questo ha dovuto semplicemente mettere [0] alla fine per selezionare il primo elemento della nuova matrice che corrisponde al filtro. – sergioadh

Problemi correlati