Obtenir un ensemble de clés d'objet

Je voudrais obtenir les clés d'un objet JavaScript en tant que tableau, soit jQuery soit JavaScript pur.

Existe-t-il un moyen moins détaillé que cela?

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = []; for (var key in foo) { keys.push(key); } 

 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = Object.keys(foo); // ['alpha', 'beta'] // (or maybe some other order, keys are unordered). 

Utilisez Object.keys .

Il s'agit d'une fonctionnalité ES5. Cela signifie qu'il fonctionne dans tous les navigateurs modernes mais ne fonctionnera pas dans les navigateurs existants .

L'ES5-shim a une implémentation de Object.keys vous pouvez voler

Vous pouvez utiliser le $.map .

 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }, keys = $.map(foo, function(v, i){ return i; }); 

Bien sûr, Object.keys() est la meilleure façon d'obtenir les clés d'un objet. Si ce n'est pas disponible dans votre environnement, il peut être modifié de façon banale à l' aide d'un code tel que dans votre exemple (sauf que vous devriez tenir compte de votre boucle itérative sur toutes les propriétés de la chaîne prototype, contrairement à Object.keys() comportement).

Cependant, votre exemple de code …

 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = []; for (var key in foo) { keys.push(key); } 

JsFiddle .

… pourrait être modifié. Vous pouvez effectuer l'affectation directement dans la partie variable .

 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = [], i = 0; for (keys[i++] in foo) {} 

JsFiddle .

Bien sûr, ce comportement est différent de ce Object.keys() ( jsFiddle ). Vous pouvez simplement utiliser la cale sur la documentation MDN .

Je ne connais pas moins de détails, mais j'ai été inspiré à contraindre le suivant à une seule ligne par la requête unique, je ne sais pas comment c'est Pythonic;

 var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo);