Nombre d'éléments dans un objet javascript
Est-il un moyen de l'obtenir (à partir de quelque part) le nombre d'éléments dans un objet javascript?? (c'est à dire de la constante de temps de la complexité).
Je ne peux pas trouver une propriété ou une méthode permettant d'extraire cette information. Jusqu'à présent, je ne peux que penser à faire une itération à travers l'ensemble de la collection, mais c'est le temps linéaire.
C'est étrange il n'y a pas d'accès direct à la taille de l'objet, vous ne pensez pas.
EDIT:
Je parle de la Object
objet (les objets en général):
var obj = new Object ;
- Déjà répondu ici stackoverflow.com/questions/126100/... de l'Objet.les touches(obj).longueur
Vous devez vous connecter pour publier un commentaire.
Bien que JS implémentations peuvent garder la trace d'une telle valeur à l'interne, il n'y a pas de méthode standard pour l'obtenir.
Dans le passé, Mozilla Javascript de la variante exposée la non-standard
__count__
, mais il a été supprimé avec la version 1.8.5.De croix-navigateur de script vous êtes coincé avec explicitement une itération sur les propriétés et de la vérification
hasOwnProperty()
:En cas d'ECMAScript 5 implémentations, cela peut aussi être écrite (Bravo à Avi Lin)
Garder à l'esprit que vous aurez manqué aussi des propriétés qui ne sont pas énumérable (par exemple un tableau de
length
).Si vous utilisez un framework comme jQuery, Prototype, Mootools, $tout-le-nouveau-battage, de vérifier si ils viennent avec leurs propres collections de l'API, ce qui pourrait être une meilleure solution à votre problème en utilisant natif d'objets JS.
__count__
est parti 🙁Pour ce faire, dans toute ES5-compatible environnement
(Prise en charge du navigateur de ici)
(Doc sur l'Objet.touches ici, comprend la méthode que vous pouvez ajouter à la non-ECMA5 navigateurs)
si vous êtes déjà à l'aide de jQuery dans votre build viens de le faire:
Il fonctionne très bien pour moi sur les objets, et j'ai déjà eu jQuery comme une dépendance.
Autant que je sache, il n'y a aucun moyen de le faire de manière fiable, sauf si vous passez à un tableau. Qui, honnêtement, n'est pas sembler étrange, il semble assez simple pour moi que les tableaux sont dénombrables, et les objets ne sont pas.
Probablement le plus proche que vous obtiendrez quelque chose comme ceci
Mais cela crée des problèmes, ou au moins des questions. Tous créés par l'utilisateur propriétés sont comptés, y compris la _length fonction elle-même! Et bien que dans ce simple exemple, vous pouvez l'éviter en utilisant simplement une fonction normale, cela ne signifie pas que vous pouvez arrêter d'autres scripts en faisant cela. alors que faites-vous? Ignorer les propriétés de la fonction?
En fin de compte, je pense que vous devriez probablement laisser tomber l'idée de faire de vos objets dénombrables et trouver une autre façon de faire tout ce que vous faites.
Le concept de nombre/longueur/dimensionnalité n'a pas vraiment de sens pour un Objet, et dans le devoir, il suggère vous voulez vraiment un Tableau pour moi.
Edit: m'a fait remarquer que vous voulez un O(1) pour cela. Au meilleur de ma connaissance, aucun moyen n'existe pas, j'ai peur.