我对形式有所了解:
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}}
我想迭代这个,所以我可以点击每年和每月组合。我有:
var years = d3.keys(test),
months = d3.range(12),
data = [];
所以,作为一个Javascript新手,为了理智检查我检查的内容years
。
document.writeln(years)
2011,2010
很酷,但是当我尝试遍历years
数组以从test
中提取数据时,我认为这些元素是正确的测试,但元素丢失了:
for(var y in years) {
document.writeln(y);
}
0,1
如何迭代years
以获取其中的实际元素(2011,2010
)?
答案 0 :(得分:2)
for in
检索索引/键(不是值)。
您需要修改循环,如下所示:
for(var y in years) {
document.writeln(years[y]);
}
编辑 - 根据missingno的评论,使用for in
迭代数组是bad idea。
for(var i = 0, l = years.length; i < l; i++) {
document.writeln(years[i]);
}
一些额外的信息......如果你对一个对象使用for / in循环,它也会迭代你的属性键。例如,
for(var y in test) {
//This will yield, "2011" and then "2010"
document.writeln(y);
}
答案 1 :(得分:2)
在javascript for in
循环中,不要按照您的想法执行操作;他们给你钥匙,而不是元素
你想要
for(var y in years) {
document.writeln(years[y]);
}
因为你回来了0,1看起来几年是一个实际的数组,所以你也可以简单地做
for(var i = 0; i < years.length; i++) {
document.writeln(years[i]);
}
此外,您已经编辑了标题,但是有关术语的说明。如果它是一个字符串,那么它是JSON。如果它是一个对象,那么,它就是一个对象。没有“json对象”或“json数组”
这样的东西答案 2 :(得分:2)
AFAIK,var y in years
会向数组years
提供键。 years[y]
应该为您提供实际价值。
答案 3 :(得分:2)
y将最终成为您访问元素的索引,年份为0和1(因为年份是数组)。因此,要访问年份值,请尝试使用
writeln(years[y])
而不是
writeln(y)
(恕我直言,通过这种方式Javascript有点反直觉)