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?

È stato utile?

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"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top