Scorrendo gli oggetti in Javascript
-
28-10-2019 - |
Domanda
Ho un obejct del modulo:
var test = {"2011":{"10":4,"9":9,"8":15,"7":11,"6":11,"5":13,"4":9,"3":5,"2":9,"1":4,"0":20},"2010":{"11":9,"10":23,"9":58}}
Voglio iterare questo modo posso colpire ogni anno e il mese di combo.Io ho:
var years = d3.keys(test),
months = d3.range(12),
data = [];
Così, come un Javascript newbie, alla sanità controllare le cose ispezionare years
.
document.writeln(years)
2011,2010
Fresco, ma quando provo a scorrere i years
matrice per estrarre i dati di test
gli elementi che faccio quello che penso sia corretta la prova, ma gli elementi sono perso:
for(var y in years) {
document.writeln(y);
}
0,1
Come faccio a scorrere years
per ottenere elementi effettivi (2011,2010
in essi?
Soluzione
for in
recupera indici/chiavi (non i valori).
Dovrai modificare il tuo loop, così:
for(var y in years) {
document.writeln(years[y]);
}
MODIFICARE - per commento di MissingNo, iterando su un array usando for in
è un cattiva idea.
for(var i = 0, l = years.length; i < l; i++) {
document.writeln(years[i]);
}
Un po 'di informazioni extra ... se usi un ciclo per/in un oggetto, itederà anche sulle chiavi della proprietà. Per esempio,
for(var y in test) {
//This will yield, "2011" and then "2010"
document.writeln(y);
}
Altri suggerimenti
Per quanto ne so, var y in years
vi darà la chiavi per la matrice years
. years[y]
dovrebbe dare il valore effettivo.
Y finirà per essere l'indice con cui accedi agli elementi da anni che è 0 e 1 (perché gli anni sono un array). Quindi, per accedere ai valori degli anni, prova a utilizzare
writeln(years[y])
invece di
writeln(y)
(IMHO, JavaScript è un po 'contro intuitivo lavorando in questo modo)
In javascript for in
loop di non fare quello che pensate;ti danno le chiavi, non gli elementi
Vuoi
for(var y in years) {
document.writeln(years[y]);
}
Dal momento che stai ricevendo 0,1 indietro, sembra che anni di un array, quindi si potrebbe anche semplicemente fare
for(var i = 0; i < years.length; i++) {
document.writeln(years[i]);
}
Inoltre, è già modificato il tuo titolo, ma una nota sulla terminologia.Se è una stringa, quindi è JSON.Se è un oggetto, quindi, beh, è un oggetto.Non c'è nessuna tale cosa come un "oggetto json" o "array json"