嘿,对不起,如果这是一个愚蠢的问题,我真的对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

09-25 15:48