Obtenez toutes les clés d'un objet JavaScript
-
25-09-2019 - |
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"
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.