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?
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
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"]
console.log( Object.keys( {'a':1,'b':2} ) );
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 -
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.
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.