Question

J'ai un obejct de la forme:

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}}

Je veux répéter cela pour pouvoir jouer chaque année et chaque mois.J'ai:

var years = d3.keys(test),
    months = d3.range(12),
    data = [];

Donc, en tant que débutant en Javascript, pour vérifier les choses, j'inspecte years.

document.writeln(years)
2011,2010 

Cool, mais quand j'essaie d'itérer sur le tableau years pour extraire des données de test, je fais ce que je pense être correct pour tester, mais les éléments sont perdus:

for(var y in years) {
  document.writeln(y);
}
0,1

Comment puis-je parcourir years pour obtenir les éléments réels (2011,2010) qu'ils contiennent?

Était-ce utile?

La solution

for in récupère les index / clés (pas les valeurs).

Vous devrez modifier votre boucle, comme ceci:

for(var y in years) {
  document.writeln(years[y]);
}

EDIT - par commentaire de missingno, itérer sur un tableau en utilisant for in est un mauvaise idée .

for(var i = 0, l = years.length; i < l; i++) {
  document.writeln(years[i]);
}

Quelques informations supplémentaires ... si vous utilisez une boucle for / in contre un objet, elle itérera également sur vos clés de propriété.Par exemple,

for(var y in test) {
  //This will yield, "2011" and then "2010"
  document.writeln(y);
}

Autres conseils

AFAIK, var y in years vous donnera les clés du tableau years.years[y] devrait vous donner la valeur réelle.

y finira par être l'index par lequel vous accédez aux éléments en années qui vaut 0 et 1 (car les années est un tableau).Donc, pour accéder aux valeurs des années, essayez d'utiliser

writeln(years[y])

au lieu de

writeln(y)

(IMHO, Javascript est un peu contre-intuitif en travaillant de cette façon)

En javascript, les boucles for in ne font pas ce que vous pensez qu'elles font;ils vous donnent les clés, pas les éléments

Vous voulez

for(var y in years) {
  document.writeln(years[y]);
}

Puisque vous récupérez 0,1, il semble que les années soient un tableau réel, vous pouvez donc simplement le faire

for(var i = 0; i < years.length; i++) {
    document.writeln(years[i]);
}

De plus, vous avez déjà modifié votre titre, mais une note sur la terminologie.Si c'est une chaîne, c'est JSON.Si c'est un objet, alors, eh bien, c'est un objet.Il n'y a pas de "json object" ou "json array"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top