TypeScript读取CSV文件时数字字段返回NaN问题求助
问题原因
- CSV字段外层包裹了双引号,直接按逗号拆分后得到的id值为
"1"格式的带引号字符串,无法直接转换为有效数字,所以得到NaN结果。 - Windows系统下CSV文件默认换行符为
\r\n,仅按\n拆分内容会导致每一行末尾残留\r回车符。 - 没有对字段外层的双引号做移除处理,导致名称字段保留了多余的引号符号。
解决方案
原生JS/TS修复方案(无需引入第三方库)
1. 优化换行拆分逻辑
调整文件内容拆分规则,兼容Windows和Unix系统的换行符,避免残留\r字符:
fs.readFile('.\\csv\\playlist.csv', 'utf8',(err, res) => { if(err){ console.error('YEET'); return; } // 用正则匹配两种换行符拆分,同时过滤空行避免报错 const lines = res.split(/\r?\n/).filter(line => line.trim() !== ''); const playlists = lines.slice(1).map((x:string) => new Playlist(x)) console.log(playlists) })
2. 调整Playlist构造函数的字段处理逻辑
新增移除字段首尾双引号的处理:
export default class Playlist{ public playlistId: number = 0; public playlistName: string = ''; constructor(line:string){ const items = line.split(','); // 移除每个字段首尾的双引号 const idStr = items[0].replace(/^"|"$/g, ''); this.playlistId = Number(idStr); this.playlistName = items[1].replace(/^"|"$/g, ''); } }
生产级优化建议
如果CSV存在字段内含逗号、换行、转义引号的复杂场景,手动拆分容易出错,建议使用成熟的CSV解析库如csv-parser,可自动处理转义字符、换行兼容、字段映射等逻辑。
内容的提问来源于stack exchange,提问作者govit19
相关产品推荐
相关产品推荐

