嘿,大家好抱歉,如果这是一个愚蠢的问题,我在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}
这样的大括号之间也不适用于我。
很抱歉,如果之前已经问过这个问题,但我不知道怎么问这个,我搜索过,找不到任何东西。
答案 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