嘿,对不起,如果这是一个愚蠢的问题,我真的对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; })]);
(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}
之类的大括号之间对我也不起作用。抱歉,如果您之前曾问过这个问题,但我不知道该怎么问,我已经搜索了,找不到任何东西。
最佳答案
您可以阅读有关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