Node.js读取CSV累加指定列数字时出现拼接/NaN问题如何解决
问题原因
- 代码未跳过CSV表头行,表头第三列内容为字符串
Daily Device Installs,parseInt转换该字符串会得到NaN,数值与NaN相加结果始终为NaN - 未做异常值兼容,即使跳过表头,若对应单元格存在空值、空白字符、非数字字符时,类型转换也会失败
修复代码
const fs = require('fs'); const parse = require('csv-parse'); const csvData = []; let test = 0; let isHeaderRow = true; const parser = parse({ delimiter: ',' }); fs.createReadStream(__dirname + '/test2.csv', 'utf16le') .pipe(parser) .on('data', function (csvrow) { csvData.push(csvrow); // 跳过表头行不参与计算 if (isHeaderRow) { isHeaderRow = false; return; } // 去除空白后转数字,判断为有效数字再累加 const cellValue = csvrow[2]?.trim() ?? ''; const installCount = Number(cellValue); if (!isNaN(installCount)) { test += installCount; } }) .on('end', function () { console.log(test); });
补充说明
- 用
isHeaderRow标记过滤表头行,避免对表头文本做类型转换 - 转换前先去除单元格内容前后的空白字符,避免不可见空格导致转换失败
- 增加有效性判断,仅对合法数字做累加,避免偶发的格式异常导致最终结果为
NaN
内容的提问来源于stack exchange,提问作者broking
相关产品推荐
相关产品推荐

