2010-07-26 6 views
102

Sto provando a controllare la lunghezza qui. Ho provato a contare. C'è qualcosa che mi manca?Controllo lunghezza dell'oggetto dizionario

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

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

dNomi contiene coppie nome/valore. So che dNames ha dei valori in quell'oggetto, ma lo sta ancora saltando completamente e quando allertò persino dName.length ovviamente non è come farlo ... quindi non sono sicuro. L'ho visto sul web. Non ho trovato nulla su questo.

+2

Non esiste alcuna proprietà "lunghezza" su oggetti semplici. Questo è qualcosa che hanno le istanze di Array. – Pointy

+0

Ok, qualcuno conosce il modo giusto o educato per assegnare la risposta? So che sberry ha avuto davvero "la risposta", ma la meder è stata in grado di spiegarlo a un ragazzo JS intermedio come me. Non voglio far incazzare nessuno. – PositiveGuy

+0

Hai assegnato la risposta alla persona che ha risposto per te. – KareemElashmawy

risposta

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, quindi è necessario iterare attraverso ... non c'è modo di farlo fuori da un oggetto personalizzato che ha nome/valori? – PositiveGuy

+2

Non penso ** ci sia. Assicurati di controllare "hasOwnProperty" per interrompere l'iterazione nella catena del prototipo e controllare solo le proprietà. – sberry

+0

Grazie ... Sono più un ragazzo OOP, ma sto iniziando ad abituarmi a JS di più. – PositiveGuy

1

Questa domanda è fonte di confusione. Un oggetto regolare, {} non ha una proprietà length a meno che non si intenda creare il proprio costruttore di funzioni che genera oggetti personalizzati che lo hanno (nel qual caso non è stato specificato).

Significato, è necessario ottenere la "lunghezza" con una dichiarazione for..in sull'oggetto, poiché length non è impostato e incrementare un contatore.

Sono confuso sul motivo per cui è necessario il length. Stai impostando manualmente 0 sull'oggetto o stai facendo affidamento su chiavi stringa personalizzate? ad es. obj['foo'] = 'bar';. Se quest'ultimo, ancora una volta, perché la necessità di lunghezza?

Modifica # 1: Perché non puoi farlo?

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

Quindi scorrere l'elenco? Il length è già impostato.

+0

Quindi una matrice ha una proprietà count ... perché probabilmente quella per è costruita nel tipo nativo JS? – PositiveGuy

+4

'[]' ha 'length',' {} 'doesnt. usa un ciclo 'for' con' length' per '[]' e un 'for..in' per' {} '. –

+1

Per rispondere alla tua domanda sì, è confuso perché non sono un ragazzo JS, sono un ragazzo di C#. Quindi dovevo controllare la lunghezza del mio dizionario per verificare se ci fossero oggetti in esso. Per la normale gestione degli errori, suppongo che verificherebbe solo il null su un dizionario, ma volevo solo vedere quanti ne sono stati restituiti e sono stati aggiunti al mio dizionario. Quindi il problema non era come iterare, basta vedere come ottenere il conteggio che ho pensato potessi fare con un oggetto di tipo dizionario (nvp), per così dire. – PositiveGuy

0

Conte e mostrare le chiavi in ​​un dizionario (eseguiti in console):

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

Esempio di output:

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

funzione di conteggio semplice:

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

Quello che faccio è uso Object.keys() per restituire un elenco di tutte le chiavi e quindi ottenere la lunghezza di quello

Object.keys(dictionary).length 
+1

Proprio quello di cui avevo bisogno! Cheers – Gesias

+11

FYI per gli altri che ancora supportano IE8: Nessun dado. [link] (http://kangax.github.io/es5-compat-table/#Object.keys) –

+0

In Chrome 53, sto vedendo Object.keys (dizionario) riportare una lunghezza di 1 anche se è un dizionario vuoto . Ha una voce chiamata '$ tipo'. – user99999991

Problemi correlati