出于某种原因,我最终将 \r
附加到数组元素的末尾。这是从文件读取数据并用 \r
分割后发生的。文件读取是通过 Node 的文件系统(fs)模块实现的。
data.txt
Samuel 20 male
Benjamin 10 male
Fortune 20 female
代码如下所示:
const fs = require('fs');
let data = fs.readFileSync('data.txt', 'utf8' );
let rawData = data => { return data.split( '\n' ) };
let objData = data => { return data.map( data => { return data.split( '\t' ) } ) }
console.log( objData( rawData( data ) ) );
代码输出:
$ node reduce_example.js
[ [ 'Samuel', '20', 'male\r' ],
[ 'Benjamin', '10', 'male\r' ],
[ 'Fortune', '20', 'female' ] ]
我在 Node v9.5.0、v9.0.0 和 v8.0.0 上运行了代码
最佳答案
文本文件使用 Windows 风格的行结束符,即“\r\n”,与 Unix 风格的行结束符“\n”相对(并且与旧的 Mac 风格的“\r”相对) )。 您可以在这里阅读有关这种差异及其产生方式的更多信息 - What is the difference between \r and \n?
要解决此差异,请更改此行:
let rawData = data => { return data.split( '\n' ) };
对此:
let rawData = data => { return data.split( '\r\n' ) };
但是,您可能会问自己,“如果我在具有 Unix 风格结尾的文件上运行此代码会发生什么?”这是一个很好的问题,但这是行不通的。要考虑两种样式的行结尾,您可以使用可选的 \r
:
let rawData = data => { return data.split(/\r?\n/) };
关于javascript - 拆分后数组中存在制表符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50310629/