Question

Je me demandais s'il y avait un moyen rapide pour extraire les clés du tableau associatif dans un tableau ou une liste séparée par des virgules en utilisant JavaScript (jQuery est ok).

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

Résultat devrait être le tableau:

["key1", "key2"]

ou tout simplement une chaîne:

"key1, key2"
Était-ce utile?

La solution

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

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

Utilisez ensuite keys comment vous voulez, par exemple:

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

Vous pouvez le tester ici . .hasOwnProperty() chèque doit être quelqu'un en toute sécurité, en cas sali avec le prototype de l'objet et tels.

Autres conseils

options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);

Une façon de le faire jQuery:

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

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

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

Vous pouvez également utiliser un petit extrait pour mettre en œuvre ce dans les navigateurs qui ne le supporte 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 de code fonctionne bien le même que celui de l'exemple de Nick Craver avec 2 exceptions:

  • Il lancera un TypeError de sens que si vous passez quoi que ce soit autre qu'un objet (ou « tableau associatif », si vous le souhaitez).
  • Il travaillera autour d'un problème lié DOM-ennuyeux dans Internet Explorer où les collections ne sont pas la méthode hasOwnProperty.

(et les autres réponses ici) ne fonctionne pas autour d'un bug de l'énumération IE, cependant. Vous pouvez trouver plus d'informations et un travail à temps partiel autour pour que sur cette réponse .

Vous pouvez maintenant utiliser

Object.keys(obj)

pour obtenir un tableau composé des clés disponibles dans un objet. Mozilla a l'utilisation et la disponibilité des informations .

Vous pouvez utiliser $.each() dans jQuery:

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

puis

var keys = keyArray(options);

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top