当网络应用的用户上传CSV时,我想在屏幕上显示上传数据的样本。他们可以上传2到2千万行,所以我想限制d3读取的数量(速度)和显示(换行),比如100行。
这可能吗?
documentation并没有让我明白答案。我看到它说
可以指定可选的行转换函数来映射和过滤 将对象划分为更具体的表示;
但我不太了解这些行转换函数或其他过滤器,如果它们只能在读取文件后应用,或者它们可用于限制正在读取的行。
答案 0 :(得分:0)
在你的行(或访问器)函数中,使用索引(第二个参数)来限制行数:
如果指定了行转换函数,则为每一行调用指定的函数,传递一个表示当前行(d)的对象,索引(i)从第一行开始为零非标题行和列名称数组。 (强调我的)
例如,在以下示例中,我将行数限制为5,即使CSV有10行(我使用<pre>
元素来模拟CSV,因为我无法使用Stack代码段上传真实的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));
&#13;
pre {
display: none;
}
&#13;
<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>
&#13;
请注意,如果CSV实际上有2000万行,正如您所说,您仍然需要等到所有文件下载完毕。行函数仅限制解析CSV时创建的数据数组:当您到达某一行时,它不会神奇地停止下载/解析过程。