web-dev-qa-db-fra.com

Obtenir un tableau des clés de l'objet

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);
}
329
Richard

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

569
Raynos

Vous pouvez utiliser la fonction $.map de jQuery.

_var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' },
keys = $.map(foo, function(v, i){
  return i;
});
_
59
Rocket Hazmat

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 .

30
alex

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);
6
George Jempty

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 }}}))
2
Cody Moniz

Sommaire

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.

Exemple:

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.

Obtenir les valeurs avec: 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));
1
Willem van der Veen

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);
1