web-dev-qa-db-fra.com

Obtenez toutes les clés d'un objet JavaScript

Je me demandais s'il y avait un moyen rapide d'extraire des clés de la matrice associative dans une matrice ou une liste séparée par des virgules à l'aide de JavaScript (JQuery est OK).

options = {key1: "value1", key2: "value2"};

Le résultat devrait être le tableau:

["key1", "key2"]

ou juste une chaîne:

"key1, key2"
18
tishma

Vous pouvez facilement obtenir un tableau d'entre eux via une boucle for, par exemple:

var keys = [];
for(var key in options) {
  if(options.hasOwnProperty(key)) { //to be safe
    keys.Push(key);
  }
}

Ensuite, utilisez keys comment vous voulez, par exemple:

var keyString = keys.join(", ");

Vous pouvez le tester ici . Le .hasOwnProperty() Vérification doit être en sécurité, au cas où tout le monde est géré avec le prototype d'objet et tel.

26
Nick Craver
options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);
24
pwl

Une façon jQuery de le faire:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.Push(key) })
console.log(keys)
5
Ege Özcan

Vous pouvez maintenant utiliser

Object.keys(obj)

obtenir un tableau consistant des clés disponibles dans un objet. Mozilla a des informations d'utilisation et de disponibilité .

2
Ege Özcan

La plupart des grands navigateurs ont cette fonctionnalité intégrée maintenant, la méthode est Object.keys() :

var keys = Object.keys(options);
//-> ["key1", "key2"]

Vous pouvez également utiliser un petit extrait pour implémenter cela dans les navigateurs qui ne le soutiennent pas:

Object.keys = Object.keys || (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;

    return function (o) {
        if (typeof o != "object" && typeof o != "function" || o === null)
            throw new TypeError("Object.keys called on a non-object");

        var result = [];
        for (var name in o) {
            if (hasOwnProperty.call(o, name))
                result.Push(name);
        }

        return result;
    };
})();

Cet extrait fonctionne beaucoup la même chose que celui de Nick Cruaver avec 2 exceptions:

  • Il lancera un significatif TypeError si vous passez autre chose qu'un objet dans (ou "tableau associatif", si vous aimez).
  • Cela fonctionnera autour d'un problème gênant lié à DOM dans Internet Explorer où les collections n'ont pas la méthode hasOwnProperty.

Cela (et les autres réponses ici) ne fonctionne pas autour d'un bogue de dénombrement IE. Vous pouvez trouver plus d'informations et un travail partiel autour de cela cette réponse ici .

2
Andy E

Vous pouvez utiliser $.each() dans jQuery:

function keyArray(obj) {
  var rv = [];
  $.each(options, function(key) { rv.Push(key); });
  return rv;
}

alors

var keys = keyArray(options);

vous donne ["key1", "key2"] En tant que tableau, que vous pourriez join pour obtenir une chaîne.

0
Pointy