限制 d3.csv 或 d3.text 读取的行数

Limit number of lines read by d3.csv or d3.text

提问人:Hack-R 提问时间:4/7/2017 最后编辑:Hack-R 更新时间:4/7/2017 访问量:1488

问:

当 Web 应用的用户上传 CSV 时,我想在屏幕上显示上传数据的示例。它们可以上传 2 到 2000 万行,因此我想将 d3 读取和显示(样式)的数量限制为 100 行。

这可能吗?

文档没有让我明白答案。我看到它说

可以指定可选的行转换函数来映射和过滤 将对象行为更具体的表示形式;

但是我不太了解这些行转换函数或其他过滤器,以及它们是否只能在读取文件后应用,或者它们是否可以用于限制正在读取的行。

d3.js

评论


答:

0赞 Gerardo Furtado 4/7/2017 #1

在行(或访问器)函数中,使用索引(第二个参数)来限制行数:

如果指定了行转换函数,则为每一行调用指定的函数,并传递一个表示当前行 (d) 的对象、第一个非标题行从零开始的索引 (i) 以及列名数组。(强调我的)

例如,在以下示例中,我将行数限制为 5,即使 CSV 有 10 行(我正在使用元素来模拟 CSV,因为我无法使用 Stack 代码段上传真正的 CSV):<pre>

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 万行,正如您所说,您仍然需要等到所有文件都下载完毕。row 函数仅限制解析 CSV 时创建的数据数组:当您到达某一行时,它不会神奇地停止下载/解析过程。