web-dev-qa-db-fra.com

Sélectionnez dans un tableau d'objets en fonction de la valeur de la propriété en JavaScript

J'ai des objets JSON qui ont plusieurs propriétés telles qu'un identifiant et un nom. Je les stocke dans un tableau JavaScript, puis sur la base d'une liste déroulante, je veux récupérer l'objet du tableau JavaScript en fonction de son identifiant.

Supposons qu'un objet ait un identifiant et un nom, comment les sélectionner dans ma variable de tableau?

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

Puisque vous avez déjà jQuery, vous pouvez utiliser $.grep :

Recherche les éléments d'un tableau qui satisfont une fonction de filtre. La baie d'origine n'est pas affectée.

Donc quelque chose comme ça:

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

cela vous laissera un tableau d'entrées correspondantes de ObjectsList dans le tableau matches. Ce qui précède suppose que ObjectsList a une structure comme celle-ci:

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

Si vous savez qu'il n'y a qu'une seule correspondance ou si vous ne voulez que la première, vous pouvez le faire de cette façon:

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

Il y a beaucoup de variations sur l'approche de boucle for et beaucoup de gens vont me faire signe parce qu'ils pensent que continue est un mauvais mot; si vous n'aimez pas continue, vous pouvez le faire de cette façon:

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