Comment trouver les clés de hachage?
Je sais que dans les Objets javascript double hachages mais j'ai été incapable de trouver une fonction intégrée à la remise des clés
var h = {a:'b',c:'d'};
Je veux quelque chose comme
var k = h.keys() ; //k = ['a','c'];
Il est simple d'écrire une fonction moi-même d'itérer sur les éléments et ajouter les clés d'un tableau que je revienne, mais est-il une norme de manière plus propre de le faire?
Je garde le sentiment qu'il doit être un simple construit en fonction que je l'ai raté mais je ne le trouve pas!
- Je suis juste de sauter en javascript, mais ce post peut vous aider. dean.edwards.nom/blog/2006/07/enum
- Double Possible de Obtenir la matrice de l'objet avec les touches
- Mais comment obtenir les valeurs des clés? En outre, obtenir le nombre de clés dans une table de hachage.
- 2017 réponse: de l'Objet.les touches(h) de l'Objet.valeurs(h)
Vous devez vous connecter pour publier un commentaire.
Il y a de la fonction moderne de JavaScript (ECMAScript 5) appelé
de l'Objet.les touches
l'exécution de cette opération:Compatibilité de détails peuvent être trouvés ici.
Sur le Site Mozilla il y a aussi un extrait de code pour compatibilité ascendante:
if(!Object.prototype.keys) Object.prototype.keys = function() { if (this !== Object(this)) throw new TypeError('Object.keys called on non-object'); var ret = [], p; for (p in this) if (Object.prototype.hasOwnProperty.call(this, p)) ret.push(p); return ret; } var x = { a: { A: 1, B: 2, C: 3 }, b: { A: 10, B: 20 } }; alert(x.a.keys());
Object.prototype.keys
ferakeys
disponible pour tous les sous-classes d'Objet, donc pour tous les objets. Ce qui, probablement, vous voulez si vous essayez d'utiliser la programmation orientée objet. De toute façon, cela dépend vraiment de vos besoins.Pour la production de code nécessitant une grande compatibilité avec les navigateurs des clients j'ai toujours penser Ivan Nevostruev la réponse ci-dessus avec shim pour assurer
Object.keys
dans les navigateurs plus anciens. Cependant, il est possible d'obtenir exactement les fonctionnalités demandées à l'aide de l'ECMA nouveaudefineProperty
fonctionnalité.Comme ECMAScript 5 - Objet.defineProperty
De ECMA5 vous pouvez utiliser
de l'Objet.defineProperty()
à définir non énumérable propriétés. Le compatibilité a encore beaucoup à désirer, mais cela devrait à terme devenir utilisable dans tous les navigateurs. (Plus précisément remarque le courant de l'incompatibilité avec IE8!)Cependant, depuis ECMA5 déjà ajouté
Object.keys
vous pourriez aussi bien utiliser:Réponse originale à cette question
Edit: Depuis cette réponse a été autour pendant un certain temps, je vais partir la dessus intacte. Tous ceux qui lisent ceci devrait également lire Ivan Nevostruev la réponse ci-dessous.
Il n'y a aucun moyen de la fabrication de prototypes de fonctions non-énumérables qui conduit à toujours tourner dans les boucles for-in qui n'utilisent pas
hasOwnProperty
. Je pense toujours que cette réponse serait l'idéal si l'on prolonge le prototype de l'Objet n'était pas tellement bordélique.Object.prototype.keys
dans ECMAScript 5. gist.github.com/1034464Object.prototype
à tous, et certainement pas de cette façon 2) Vous devriez être en utilisantObject.keys
comme mentionné dans Ivan Nevostuev réponsevous pouvez utiliser
Object.keys
Vous pouvez utiliser Underscore.js, qui est un utilitaire de Javascript library.
Object.prototype
_.keys(obj).length
pour voir si il ya toutes les clés.C'est le meilleur que vous pouvez faire, autant que je sache...
à l'aide de jQuery vous pouvez obtenir les clés comme ceci:
Ou:
grâce à @pimlottc
JQuery.map
:$.map(h, function(v,k) { return k; });
Je crois que vous pouvez faire une boucle à travers les propriétés de l'objet à l'aide de/, de sorte que vous pourriez faire quelque chose comme ceci:
Je voulais utiliser le top rated réponse ci-dessus
Cependant lors de l'utilisation en conjonction avec l'API google maps v3, google maps est non-fonctionnelle.
fonctionne bien.
si vous essayez d'obtenir les éléments, mais pas les fonctions de ce code peut vous aider à
}
cela fait partie de ma mise en œuvre de la table de hachage et je veux seulement les touches,
this
est la table de hachage de l'objet qui contient les touches de