使用变量调用数据集d3.js中的数据列

时间:2017-05-30 17:16:39

标签: javascript d3.js

嘿,大家好抱歉,如果这是一个愚蠢的问题,我在Javascript / d3.js真的很棒。所以基本上我有一个.csv文件,其中包含许多国家和每年的军事力量,如下所示:

year,country1,country2,country3,...

1989,192129,129312,12391,...

1990,192913,123131,12331,...

1991,123112,123123,12313,...

我用x轴制作了一年的折线图,用y轴制作了一个国家的力量

d3.csv("data.csv", function(error, data) {
if (error) throw error;
data.forEach(function(d) {
  d.Year = parseTime(d.Year);
  d.NLD = +d.NLD;
});

x.domain(d3.extent(data, function(d) { return d.Year; }));
y.domain([0, d3.max(data, function(d) { return d.NLD; })]);

(全国民主联盟是国家代码)以及从https://bl.ocks.org/d3noob/257c360b3650b9f0a52dd8257d7a2d73

取得的其他内容

这样可行但现在我的问题是我可以制作一个可以放置的变量而不是NLD,以便您可以轻松地在它们之间进行更改,如

var country = "NLD";

然后放置该变量,使代码看起来像这样

d3.csv("data.csv", function(error, data) {
if (error) throw error;
data.forEach(function(d) {
  d.Year = parseTime(d.Year);
  d.country = +d.country;
});

x.domain(d3.extent(data, function(d) { return d.Year; }));
y.domain([0, d3.max(data, function(d) { return d.country; })]);

将它放在像d.{country}这样的大括号之间也不适用于我。

很抱歉,如果之前已经问过这个问题,但我不知道怎么问这个,我搜索过,找不到任何东西。

1 个答案:

答案 0 :(得分:3)

您可以阅读有关它的更多信息here,但基本上属性访问器采用两种形式之一,如d.country中的点访问器或d['NLD']中的方括号访问器。使用点表示法,点之后的任何内容都必须是有效的属性名称。在您的代码d.country中,字面上会在对象country上查找d属性的值。在这种情况下,您应该使用方括号访问器。在方括号访问器中,无论放在方括号中,它所评估的内容都将成为所访问的属性。所以你的代码看起来像这样

var country = 'NLD'
...
y.domain([0, d3.max(data, function(d) { return d[country]; })]);

这相当于写d['NLD'],相当于写d.NLD