javascript - 有没有一种简单的方法可以在 d3.csvParse 遇到空行时停止它?

标签 javascript csv d3.js

我有 CSV,其中包含我想要的 20 行数据、一些空白行,以及其他人正在根据他们关心的数据计算的其他内容。我正在使用 d3.csvParse,它会拾取额外的行。有没有办法告诉它在遇到空白行时停止,或者只能在后处理中处理?

data = d3.csvParse(await FileAttachment("Coverage Data.csv").text(), d3.autoType)

最佳答案

d3.csvParse 提供了传递 row 转换函数的功能(请参阅 dsv.Parse ),您可以使用它来检查和消除空白行。

您可以定义一个仍包含 d3.autoTypeblankChecker 函数,并将该函数作为 row 参数传递。它可以用于输入中间或末尾的空白行。

请参阅下面的文字字符串作为输入:

const csv = `foo,bar,baz
0,"a",10
1,"b",20
2,"c",30
,,
4,"d",40
5,"e",50
,,
,,
8,"f",60
,,
,,
,,
,,`;

const blankChecker = (d, i) => {
  const blankRow = Object.keys(d).every(k => !d[k]);
  if (!blankRow) return d3.autoType(d);
  console.log(`Row ${i} has all blank values`);
}

const data = d3.csvParse(csv, blankChecker);

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.5.0/d3.min.js"></script>

如果您想在第一次出现空白行时停止解析,您可以定义一个类似的函数来执行此操作。在下面的示例中,如果不应返回更多行,则 blankQuitterprocessing 标志设置为 false:

const csv = `foo,bar,baz
0,"a",10
1,"b",20
2,"c",30
,,
4,"d",40
5,"e",50
,,
,,
8,"f",60
,,
,,
,,
,,`;

let processing = true;
const blankQuitter = (d, i) => {
  const blankRow = Object.keys(d).every(k => !d[k]);
  if (blankRow) processing = false;
  if (processing) return d3.autoType(d);
}

const data = d3.csvParse(csv, blankQuitter);

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/6.5.0/d3.min.js"></script>

关于javascript - 有没有一种简单的方法可以在 d3.csvParse 遇到空行时停止它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67793952/

相关文章:

javascript - jQuery 移动面板不会仅在 Android 浏览器上完全关闭

javascript - 如何在 Angular 图表条形图中使用纯色条

arrays - 你能把带括号和数组格式的字符串转换成数组吗?

javascript - 创建过去 365 天的日历网格

javascript - 带有 Flask 服务器的 d3 饼图

javascript - 返回 Mongodb 查询 Distinct

javascript - fullcalendar.js 隔周重复发生的事件

c++ - 仅使用标准库从 100k+ 行的 tsv 中读取特定行的数据

c - 如何在c中打印csv文件的数据?

javascript - 在单击/悬停的节点上显示名称? (D3.js 版本 4)