Itérer des objets en Javascript
-
28-10-2019 - |
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?
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"