42 votes

Sélectionnez à partir d'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 et ensuite, en fonction 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 depuis ma variable de tableau?

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

60voto

mu is too short Points 205090

Étant donné que vous avez déjà jQuery, vous pourriez utiliser $.grep :

Retrouve les éléments d'un tableau qui satisfont une fonction de filtrage. Le tableau d'origine n'est pas modifié.

Donc quelque chose comme ceci :

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

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

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

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

for(var i = 0, m = null; i < ObjectsList.length; ++i) {
    if(ObjectsList[i].id != wanted_id)
        continue;
    m = a[i];
    break;
}
// m est maintenant soit nul, soit celui que vous voulez

Il existe de nombreuses variations de l'approche de la boucle for et beaucoup de personnes me critiqueront parce qu'elles pensent que continue est un mot tabou ; si vous n'aimez pas continue, vous pourriez le faire de cette manière :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X