2014-12-07 91 views
0

我想使用d3.csv加載外部.csv文件。d3.csv不加載數字矩陣

這是data.csv(在vim創建):

x,y 
2,2 
99,18 

這是D3代碼:

d3.csv("data.csv", function(dataset){ 
console.log(d3.max(dataset, function(d){return d["y"];})); 
}); 

即使我預計 '18' 在控制檯中我得到的輸出是'2'。如果我將「18」更改爲另一個數字,例如'35'輸出再次正確。我究竟做錯了什麼?

+0

數字被解釋爲字符串,您需要將它們轉換爲數字。試試'+ d [「y」]'。 – 2014-12-07 22:35:05

回答

1

這些數字正在作爲字符串加載,這會導致d3.max的意外行爲。您需要將這些值轉換爲Numbers。

您可以通過Number(d.y)或(parseInt,parseFloat)將它們變成數字。在d3中,您經常會將其縮短爲y: +d.y

使用d3.csv您可以指定一個函數,您可以在解析時進行此轉換。 See documentation

+0

謝謝,我按照'parse'下的文檔中的例子。一切都按預期運作。你知道爲什麼這個問題只發生在某些數字(如10,11,12,100,...)而不是其他數字(如23,35,...)? – 2014-12-08 09:56:46

+0

我不得不檢查d3.max的源代碼以確定,但很可能它在內部使用的是大於或小於運算符。在這種情況下,字符串「2」大於「18」,因爲字符串比較基本上像字母排序,而後者以「1」開始,它在「2」之前。 – meetamit 2014-12-08 14:47:56

+0

有趣!感謝您的幫助,非常感謝! – 2014-12-08 18:17:31