2011-11-29 30 views
39

Mam obiekty JSON, które mają kilka właściwości, takich jak id i nazwa. Przechowuję je w tablicy JavaScript, a następnie na podstawie listy rozwijanej chcę pobrać obiekt z tablicy JavaScript na podstawie jego identyfikatora.Wybierz z tablicy obiektów na podstawie wartości właściwości w JavaScript

Załóżmy, że obiekt ma identyfikator i nazwę, w jaki sposób wybrać je z mojej zmiennej tablicowej?

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

Trzeba pokazać rzeczywiste dane JSON, który próbujesz wybrać z celem dla nas jest w stanie doradzić w jaki sposób do niego dostęp . – jfriend00

Odpowiedz

57

Skoro masz już jQuery, można użyć $.grep:

odnajduje elementy tablicy, które spełniają funkcję filtra. Nie ma to wpływu na oryginalną tablicę.

Więc coś takiego:

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

które zostawiają cię z tablicą pasujących wpisów z ObjectsList w tablicy matches. Powyższe zakłada, że ​​ObjectsList ma strukturę takiego:

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

Jeśli wiesz, że istnieje tylko jeden mecz lub jeśli chcesz tylko pierwszy wtedy można zrobić to w ten sposób:

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 

Nie jest wiele wariacji na temat pętli for, a wiele osób macha do mnie palcem, ponieważ uważają, że continue jest złym słowem; jeśli nie podoba continue następnie można zrobić to w ten sposób:

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

Ta sztuczka właśnie musiała umieścić [0] na końcu, aby wybrać pierwszy element nowej tablicy, która pasuje do filtra. – sergioadh

Powiązane problemy