纯Javascript导出JSON为TXT时如何给第2行及以后行尾添加*
实现方法
你只需要调整生成数据行的逻辑,在非表头的每行末尾拼接*即可,有个非常简便的修改方式:你原本代码里items.map生成的所有内容都是需要加后缀的业务数据行,表头是后续才通过unshift插入到数组首位的,所以直接在数据行生成的时候末尾加*就可以满足需求。
修改后的完整代码如下:
function download() { const originalData = [ { name: 'Support', message: 'Hey! Welcome to support', }, { name: 'Me', message: 'Hello there!', }, { name: 'Support', message: 'What can I do for you?', }, ]; var items = originalData; const replacer = (key, value) => (value === null ? '' : value); // 这里定义null值的处理规则 const header = Object.keys(items[0]); // 改动点:生成数据行的时候末尾直接拼接* let csv = items.map((row) => header .map((fieldName) => JSON.stringify(row[fieldName], replacer)) .join(',') + '*' ); csv.unshift(header.join(',')); csv = csv.join('\r\n'); // 下载文件逻辑,后缀改.csv就会导出CSV格式 var downloadLink = document.createElement('a'); var blob = new Blob(['\ufeff', csv]); var url = URL.createObjectURL(blob); downloadLink.href = url; downloadLink.download = 'DataDump.txt'; // 在这里自定义文件名 document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); }
修改后导出的文件内容就会完全匹配你的预期。如果后续你需要调整加后缀的行规则,也可以在join('\r\n')之后把所有行按换行符拆分,遍历行的时候判断行号再做修改,不过当前场景下上面的修改方式性能最优,代码改动最小。
内容的提问来源于stack exchange,提问作者Muammar HM
相关产品推荐
相关产品推荐

