我正在尝试使用d3从JSON文件中的数据创建堆叠条形图。每个酒吧都会有一个特定月份的平局、输赢。
JSON文件:
{
"name": "FHS",
"points": 3000,
"ties": 3,
"losses": 19,
"wins": 50,
"games": {
"2010-09": { "ties": 1, "losses": 2, "wins": 16 },
"2010-10": { "ties": 2, "losses": 5, "wins": 13 },
"2010-11": { "ties": 0, "losses": 12, "wins": 21 }
}
}
我已经通过d3.json功能很好地使用了一些数据。例如:
d3.json("data.json",function(error,data)
{
alert(data.name);
alert(data.points);
// etc.
});
但这是有趣的地方(仅供参考,我使用下划线库来获取“游戏”的每个属性...perhaps这就是我出错的地方?)。如果我尝试执行以下操作:
_.keys(data.games).forEach(function(d)
{
alert(d);
});
我在三个不同的警报boxes...perfect中得到了2010-09,2010-10,2010-11!但是,如果我尝试执行以下操作:
_.keys(data.games).forEach(function(d)
{
alert(d.ties);
});
我没有定义:/事实上,我看到的另一个问题是
alert(data.games.2010-09.ties);
应该可以工作(如果属性名称不是以整数或连字符开头...),但由于文字("2010-09")...so的格式而不能工作,我的主要问题是如何以这样一种方式动态访问嵌套对象属性,从而使生成图表变得简单。我已经尝试包括足够的上下文,但如果您想要更多的信息,请告诉我。提前感谢!
发布于 2012-11-04 11:10:12
您在警告框中没有定义,因为在此函数中,d
是一个字符串- "2010-09“、"2010-10”、"2010-11“等-因为您正在迭代_.keys(data.games)
返回的字符串数组。
因此,alert(d.ties)
类似于调用alert("2010-09".ties)
,这是意想不到的未定义。
但是,根据拉斯的解释,
_.keys(data.games).forEach(function(d)
{
alert(data.games[d].ties);
});
是你如何获取数据的。
P.S.Javascript是更健壮的方法(因此通常是首选方法)来调试console.log(data.games[d].ties)
。
发布于 2012-11-04 01:58:40
您可以将密钥包含在[""]
中以获取该值,即alert(data.games["2010-09"].ties);
将起作用。您可能还会对使用键值结构的d3函数感兴趣;请参阅the documentation。
https://stackoverflow.com/questions/13211705
复制相似问题