2017-04-06 78 views
1

當Web應用程序的用戶上載CSV時,我想在屏幕上顯示上傳數據的樣本。他們可以上傳2到2000萬行,所以我想限制d3讀取的數字(用於速度)和顯示(用於樣式),比方說100行。d3.csv或d3.text讀取的行數限制

這可能嗎?

documentation沒有使我的答案顯而易見。我看到它說

可以指定一個可選的行轉換函數來映射和過濾行對象到一個更具體的表示;

但我真的不明白這些行轉換函數或其他過濾器,以及它們是否只能在讀取文件後應用,或者它們是否可用於限制正在讀取的行。

回答

0

在您的行(或訪問)功能,使用索引(第二個參數)來限制的行數:

如果指定了一個行轉換功能,對指定的函數調用對每行,傳遞一個表示當前行(d)的對象,索引(i)從零開始,爲第一個非標題行以及列名稱數組。 (重點煤礦)

例如,在下面的例子中,我限制的行數爲5,即使CSV具有10行(我使用<pre>元件來模擬CSV因爲我不能上傳使用堆棧段)真正的CSV:

var data = d3.csvParse(d3.select("#csv").text(), row); 
 

 
function row(d, i) { 
 
    if (i < 5) return d; 
 
} 
 

 
console.log("data length is " + data.length); 
 
console.log("data is " + JSON.stringify(data));
pre { 
 
    display: none; 
 
}
<script src="https://d3js.org/d3.v4.min.js"></script> 
 
<pre id="csv">foo,bar 
 
12,23 
 
13,22 
 
43,66 
 
3,4 
 
66,55 
 
43,48 
 
32,11 
 
11,11 
 
21,23 
 
78,17</pre>

有想法,如果CSV實際上已經2000萬行,就像你說的,你還是得等到全部文件被下載。行函數僅限制解析CSV時創建的數據數組:當您到達特定行時,它不會奇蹟般地停止下載/解析過程。