使用D3数据方法中的变量来提取JSON数据

时间:2014-07-27 22:36:26

标签: javascript json d3.js

所以我从JSON代码中提取数据,但我希望我拉的数据是一个变量(我会让用户通过使用选择菜单来定义)而不是直接引用。

我只是想知道“d”之后是否有可能。变量?如果不是,我很乐意听到一些建议的解决方法。以下是我希望实现的解决方案示例。

canvas.selectAll("circle")
.data(finaldataset)
.enter();

var userBuiltVariable1 = someStringMadeViaSelectMenus;
var userBuiltVariable2 = someStringMadeViaSelectMenus;
var userBuiltVariable3 = someStringMadeViaSelectMenus;

circles.transition()
.duration(1000)
.attr("cx", function(d){ return d.userBuiltVariable1})
.attr("cy", function(d){ return d.userBuiltVariable2})
.attr("r", function(d){return d.userBuiltVariable3});

JSON代码看起来像这样;

"Country":"Wales",
"BoyEveryday1102":"0.9",
"BoyOnceWeek1102":"1.2",
"BoyLessThanOW1102":"1.9",
"BoyDont1102":"96.0"

这种速记意味着性别 - 他们吸烟的频率 - 他们的年龄 - 数据采取的年份。所以第二行显示了男孩,他们在2002年每天抽烟,11岁。其他例子包括“GirlOnceWeek1510”或“GirlDont1306”,所以这个变量将由用户用选择菜单构建。任何帮助非常感谢 - 谢谢

1 个答案:

答案 0 :(得分:0)

是的,这很容易做到。解决方案与d3本身无关,只是Javascript基础知识。

如果您有Javascript对象,可以通过多种方式查询其属性。

第一个也是最常见的一个是点符号,您已经在上面的代码中使用了它。

var myObject = { foo: 'bar' };
console.log( 'dot notation', foo.bar );

另一种不常见的痤疮是使用方括号。有了这个,你可以使用任何变量(但只使用字符串才有意义。)

var myObject = { foo: 'bar' };
var myProperty = 'foo';
console.log( 'square brackets', foo[myProperty] );

现在将此应用于您的示例代码:

var userBuiltVariable1 = someStringMadeViaSelectMenus;
var userBuiltVariable2 = someStringMadeViaSelectMenus;
var userBuiltVariable3 = someStringMadeViaSelectMenus;

circles.transition()
.duration(1000)
.attr("cx", function(d){ return d[userBuiltVariable1]})
.attr("cy", function(d){ return d[userBuiltVariable2]})
.attr("r", function(d){return d[userBuiltVariable3]});

......应该给你你想要的东西。

HTH!