web-dev-qa-db-fra.com

comment récupérer des clés de tableau avec jQuery?

Bonne après-midi. J'ai un tableau avec quelques clés et des valeurs. J'ai ensuite besoin de récupérer les clés du tableau et non les données qu'elles contiennent. Je veux le faire avec jQuery. Je sais par exemple que PHP a une fonction appelée array_keys (); qui prend le tableau en paramètre et vous donne un tableau avec chaque clé dans chaque index.

C'est ce que j'ai trouvé, et ça marche ... le seul problème est qu'il semble si inefficace;

var foo = [];
foo['alfa'] = "first item";
foo['beta'] = "second item";

for (var key in foo) {
    console.log(key);
}

Cela produira;

alfa
beta

Mais existe-t-il une fonction prédéfinie pour cela, comme dans PHP ou tout autre moyen plus efficace d'obtenir cela?

34
Stefan Konno

vous pouvez utiliser la fonction each:

var a = {};
a['alfa'] = 0;
a['beta'] = 1;
$.each(a, function(key, value) {
      alert(key)
});

il a plusieurs bons raccourcis/astuces: vérifiez les détails sanglants ici

61
dfa

En utilisant jQuery, le moyen le plus simple d'obtenir un tableau de clés à partir d'un objet est le suivant:

$.map(obj, function(element,index) {return index})

Dans votre cas, il renverra ce tableau: ["alfa", "beta"]

50
dugokontov
console.log( Object.keys( {'a':1,'b':2} ) );
28
Andy

Utilisez un objet (paires clé/valeur, le JavaScript le plus proche a un tableau associatif) pour cela et non l'objet tableau. A part ça, je pense que c'est la manière la plus élégante

var foo = {};
foo['alfa'] = "first item";
foo['beta'] = "second item";

for (var key in foo) {
        console.log(key);
}

Remarque: JavaScript ne garantit aucun ordre particulier pour les propriétés. Vous ne pouvez donc pas vous attendre à ce que la propriété définie en premier apparaisse en premier, elle pourrait arriver en dernier.

MODIFIER:

En réponse à votre commentaire, je pense que cet article résume le mieux les raisons pour lesquelles les tableaux en JavaScript ne devraient pas être utilisés de cette façon -

6
Russ Cam

Ne réinventez pas la roue, utilisez Souligné

Je connais l'OP spécifiquement mentionné jQuery mais je voulais mettre une réponse ici pour présenter aux gens l'utile Soulignez la bibliothèque s'ils ne le savent pas déjà.

En tirant parti de la méthode keys dans la bibliothèque Underscore , vous pouvez simplement faire ce qui suit:

_.keys(foo)  #=> ["alfa", "beta"]

De plus, il existe une pléthore d'autres fonctions utiles qui méritent d'être étudiées.

5
Joshua Pinter

J'utilise quelque chose comme cette fonction que j'ai créée ...

Object.getKeys = function(obj, add) {
    if(obj === undefined || obj === null) {
        return undefined;
    }
    var keys = [];
    if(add !== undefined) {
        keys = jQuery.merge(keys, add);
    }
    for(key in obj) {
        if(obj.hasOwnProperty(key)) {
                keys.Push(key);
        }
    }
    return keys;
};

Je pense que vous pouvez définir obj sur self ou quelque chose de mieux dans le premier test. Il semble parfois que je vérifie s'il est vide aussi, alors je l'ai fait de cette façon. De plus, je ne pense pas que {} soit Object. * Ou du moins il y a un problème pour trouver la fonction getKeys sur l'Object de cette façon. Peut-être que vous êtes censé mettre le prototype en premier, mais cela semble provoquer un conflit avec GreenSock, etc.

0
MistereeDevlord