JavaScript对象数组转CSV下载出现[object Object]错误求助
问题原因
你写的convertToCsv函数没有做对象数组到CSV格式的转换逻辑,直接把原始对象数组传给了Blob构造函数。Blob处理非字符串内容时会默认调用toString()方法做类型转换,普通JS对象调用这个方法的返回值就是[object Object],所以最终导出的文件里就只有这串内容。
修复后的转换代码
const convertToCsv = (objects) => { if (!objects?.length) return '' // 取第一个对象的键作为CSV表头,需要自定义导出字段的话可以手动写数组,比如 ['name','email'] const headers = Object.keys(objects[0]) const csvRows = [ // 拼接表头行 headers.join(','), // 拼接每一行数据 ...objects.map(item => { return headers.map(key => { // 处理字段转义,避免内容里的逗号、双引号破坏CSV格式 const value = item[key] ?? '' const escapedValue = String(value).replace(/"/g, '""') return `"${escapedValue}"` }).join(',') }) ] // 拼接完整CSV字符串,加\ufeff是解决Excel打开乱码的问题 const csvContent = '\ufeff' + csvRows.join('\n') const dataBlob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' }) return URL.createObjectURL(dataBlob) }
补充注意事项
- 如果不需要自动读取所有字段,手动定义
headers数组即可指定要导出的字段和顺序 - 页面卸载或者下载完成后建议调用
URL.revokeObjectURL(返回的blob地址)释放内存,避免不必要的资源占用
内容的提问来源于stack exchange,提问作者jjlittle
相关产品推荐
相关产品推荐

