2010-07-26 6 views
102

Je suis en train de vérifier la longueur ici. Compte essayé. Y a-t-il quelque chose qui me manque?longueur Checking d'objet dictionnaire

var dNames = {}; 
dNames = GetAllNames(); 

for (var i = 0, l = dName.length; i < l; i++) 
{ 
     alert("Name: " + dName[i].name); 
} 

dNames contient des paires nom/valeur. Je sais que dNames a des valeurs dans cet objet, mais il est encore complètement sauter sur cela et quand j'alerter sur même dName.length évidemment ce n'est pas comment faire ... donc pas sûr. Je l'ai regardé sur le web. Je n'ai rien trouvé à ce sujet.

+2

Il n'y a pas la propriété « longueur » sur des objets simples. C'est quelque chose que les instances Array ont. – Pointy

+0

Ok, quelqu'un sait la manière correcte ou polie d'attribuer la réponse? Je sais que sberry a vraiment trouvé la réponse, mais Meder a pu l'expliquer à un type intermédiaire de JS comme moi. Je ne veux pas faire chier quelqu'un. – PositiveGuy

+0

Vous attribuez la réponse à la personne dont la réponse a fonctionné pour vous. – KareemElashmawy

Répondre

7
var c = {'a':'A', 'b':'B', 'c':'C'}; 
var count = 0; 
for (var i in c) { 
    if (c.hasOwnProperty(i)) count++; 
} 

alert(count); 
+0

ok donc vous devez itérer à travers ... pas moyen de le faire sur un objet personnalisé qui a un nom/valeurs? – PositiveGuy

+2

Je ne pense pas ** il y a. Assurez-vous de vérifier la propriété "hasOwnProperty" pour arrêter l'itération dans la chaîne du prototype et vérifier uniquement les propriétés. – sberry

+0

Merci..Je suis plus un gars OOP, mais commencer à s'habituer à JS plus. – PositiveGuy

1

Cette question porte à confusion. Un objet régulier, {} ne dispose pas d'une propriété length à moins que vous avez l'intention de faire votre propre constructeur de fonction qui génère des objets personnalisés qui n'ont (dans ce cas, vous n'avez pas spécifié). Cela signifie que vous devez obtenir la "longueur" par une instruction for..in sur l'objet, puisque length n'est pas définie et incrémenter un compteur.

Je suis confus quant à la raison pour laquelle vous avez besoin du length. Définissez-vous manuellement 0 sur l'objet ou utilisez-vous des clés de chaîne personnalisées? par exemple obj['foo'] = 'bar';. Si ce dernier, encore une fois, pourquoi le besoin de longueur?

Édition # 1: Pourquoi ne pas le faire?

list = [ {name:'john'}, {name:'bob'} ]; 

Puis itérer sur la liste? Le length est déjà défini.

+0

Donc un tableau a une propriété de comptage ... car probablement pour cela est construit dans le type natif de JS? – PositiveGuy

+4

'[]' a 'longueur',' {} 'doesnt. utilisez une boucle 'for' avec' length' pour '[]' et un 'for..in' pour' {} '. –

+1

Pour répondre à votre question oui, c'est déroutant parce que je ne suis pas un gars JS, je suis un gars C#. Je devais donc vérifier la longueur de mon dictionnaire pour tester s'il contenait des objets. Pour la gestion des erreurs, je suppose que vous devriez simplement vérifier null sur un dictionnaire, mais je voulais juste voir combien retourné et a été ajouté à mon dictionnaire. Donc, le problème n'était pas comment itérer, il suffit de voir comment obtenir le nombre que je pensais pouvoir utiliser avec un objet de type dictionnaire (nvp) pour ainsi dire. – PositiveGuy

0

Count touches show dans un dictionnaire (courir dans la console):

o=[];count=0; for (i in topicNames) { ++count; o.push(count+": "+ i) } o.join("\n") 

Exemple de sortie:

"1: Phase-out Left-hand 
2: Define All Top Level Taxonomies But Processes 
3: 987 
4: 16:00 
5: Identify suppliers" 

fonction de comptage simple:

function size_dict(d){c=0; for (i in d) ++c; return c} 
254

Ce que je fais est l'utilisation Object.keys() pour retourner une liste de toutes les clés et obtenir la longueur de cette

Object.keys(dictionary).length 
+1

Juste ce dont j'avais besoin! Cheers – Gesias

+11

FYI pour les autres qui supportent encore IE8: Pas de dés. [link] (http://kangax.github.io/es5-compat-table/#Object.keys) –

+0

Dans Chrome 53, je vois Object.keys (dictionnaire) signaler une longueur de 1 même si c'est un dictionnaire vide . Il a une entrée appelée '$ type'. – user99999991

Questions connexes