J'aimerais obtenir les clés d'un objet JavaScript sous forme de tableau, que ce soit en jQuery ou en JavaScript pur.
Y a-t-il un moyen moins verbeux que cela?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
keys.Push(key);
}
Utilisez Object.keys
:
_var foo = {
'alpha': 'puffin',
'beta': 'beagle'
};
var keys = Object.keys(foo);
console.log(keys) // ['alpha', 'beta']
// (or maybe some other order, keys are unordered).
_
Ceci est une fonctionnalité ES5. Cela signifie que cela fonctionne dans tous les navigateurs modernes, mais ne fonctionnera pas dans les anciens navigateurs .
Le ES5-shim a un implémentation de _Object.keys
_ que vous pouvez voler
Vous pouvez utiliser la fonction $.map
de jQuery.
_var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' },
keys = $.map(foo, function(v, i){
return i;
});
_
Bien sûr, Object.keys()
est le meilleur moyen d'obtenir les clés d'un objet. Si ce n'est pas disponible dans votre environnement, il peut être trivial shimmed en utilisant un code tel que dans votre exemple (sauf que vous devez prendre en compte votre boucle itérera sur toutes les propriétés dans la chaîne de prototypes, contrairement au comportement de Object.keys()
).
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 faire l’affectation directement dans la partie variable .
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [], i = 0;
for (keys[i++] in foo) {}
jsFiddle .
Bien entendu, ce comportement est différent de ce que fait Object.keys()
( jsFiddle ). Vous pouvez simplement utiliser le calque sur la documentation MDN .
Je ne sais pas pour moins de commentaires, mais j’ai eu l’inspiration de forcer les éléments suivants sur une ligne par la requête one-liner, je ne sais pas comment Pythonic est réellement;)
var keys = (function(o){var ks=[]; for(var k in o) ks.Push(k); return ks})(foo);
Si vous êtes ici à la recherche de quelque chose pour répertorier les clés d'un objet imbriqué à n profondeurs sous forme de tableau à plat:
const getObjectKeys = (obj, prefix = '') => {
return Object.entries(obj).reduce((collector, [key, val]) => {
const newKeys = [ ...collector, prefix ? `${prefix}.${key}` : key ]
if (Object.prototype.toString.call(val) === '[object Object]') {
const newPrefix = prefix ? `${prefix}.${key}` : key
const otherKeys = getObjectKeys(val, newPrefix)
return [ ...newKeys, ...otherKeys ]
}
return newKeys
}, [])
}
console.log(getObjectKeys({a: 1, b: 2, c: { d: 3, e: { f: 4 }}}))
Pour obtenir toutes les clés d'un objet, vous pouvez utiliser Object.keys()
. Object.keys()
prend un objet en argument et retourne un tableau de toutes les clés.
const object = {
a: 'string1',
b: 42,
c: 34
};
const keys = Object.keys(object)
console.log(keys);
console.log(keys.length) // we can easily access the total amount of properties the object has
Dans l'exemple ci-dessus, nous stockons un tableau de clés dans les clés const. Nous pouvons ensuite facilement accéder à la quantité de propriétés sur l'objet en vérifiant la longueur du tableau keys.
Object.values()
La fonction complémentaire de Object.keys()
est Object.values()
. Cette fonction prend un objet en argument et renvoie un tableau de valeurs. Par exemple:
const object = {
a: 'random',
b: 22,
c: true
};
console.log(Object.values(object));
Si vous décidez d'utiliser Underscore.js, vous ferez mieux
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
_.each( foo, function( val, key ) {
keys.Push(key);
});
console.log(keys);