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

问题描述:

嘿,大家对不起,如果这是一个愚蠢的问题,我真的很喜欢Javascript/d3.js。所以基本上我有一个.csv文件,有很多国家和看起来像这样每年可为军事力量的量:使用变量来调用数据集中的数据列d3.js

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}对我也不起作用。

对不起,如果这个问题之前已经问过,但我不知道如何问这个,我已经搜索,找不到任何东西。

+1

,而不是'd.country'使用'd [国家]' – richbai90

+0

OMG的解决方案是如此简单哈哈我已经尝试过d。{country}和d。[country],但他们没有工作,但我从来没有想过d [country]。 Thans很多! –

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

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

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