2017-08-27 56 views
1

我從this block驗證碼:我無法理解這樣的.csv文件如何讀取

d3.csv("data.csv", function(d, i, columns) { 
    for (var i = 1, n = columns.length; i < n; ++i) d[columns[i]] = +d[columns[i]]; 
    return d; 
    }, function(error, data) {script goes here}); 

我不明白的代碼是如何使字符串和數字之間的差別,因爲+d[columns[i]] = +d[columns[i]]應該表示一切都被理解爲一個數字,不是嗎?

在塊中的數據是這樣的:

State,Under 5 Years,5 to 13 Years,14 to 17 Years 
CA,2704659,4499890,2159981 
TX,2027307,3277946,1420518 
NY,1208495,2141490,1058031 

所以在某些時候不應該代碼試圖解釋CA爲多少?

回答

2

該代碼遍歷從索引1開始的列(for var i = 1),這將跳過第一列,因爲columns數組基於零。由於在CSV的其餘部分沒有更多的非數字值,所以從此就可以正常工作。

+0

哦,我認爲這是沿着每條線垂直迭代,謝謝。但是,腳本如何獲得每個州的名稱?這裏'x0.domain(data.map(function(d){return d.State;}));'你看到d.State被使用,當它沒有從.csv文件中讀取時。所以,即使你沒有從d3.csv中得到它,你仍然可以在以後使用它? 我不知道我是否很清楚。 –

+1

第一列僅跳過轉換; 「國有」財產將保持不變。請注意,整個行由'return d'返回,其所有初始屬性的列索引1至n都轉換爲數字。 – altocumulus

+0

非常感謝!因此,如果我理解正確,沒有這行'for(var i = 1,n = columns.length; i