2017-05-30 41 views
0

嘿,大家對不起,如果這是一個愚蠢的問題,我真的很喜歡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很多! –

回答

1

您可以閱讀更多關於它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