出于某种原因,我最终将\r
附加到我的数组元素的末尾。这是在从文件中读取数据并使用\r
分割后发生的。文件读取是通过节点的文件系统(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' ] ]
我在节点v9.5.0,v9.0.0 和 v8.0.0
上运行了代码答案 0 :(得分:1)
您可以使用可选的\r
进行拆分。
var data = 'Samuel\t20\tmale\r\nBenjamin\t10\tmale\r\nFortune\t20\tfemale';
let rawData = data => data.split(/\r?\n/);
let objData = data => data.map(data => data.split('\t'));
console.log(objData(rawData(data)));
答案 1 :(得分:0)
使用/\r?\n/
拆分换行符。然后trim()
删除空格。
\r?\n
将同时匹配\r\n
和\n
\r
是可选的,因为它位于?
之前,意为zero
或one
\n
必须始终存在map
,它会在每个项目上执行一个函数,返回带有新结果的新数组。
let str = 'abc\r\ndefg\n\t123\n\t456\r\n789'
console.log(str.split(/\r?\n/g).map(i => i.trim()))

答案 2 :(得分:0)
另一种方法是使用readline
并逐行读取文件,而不是将整个文件读入内存和放大器。在线结尾分裂。 readline将为您处理多个操作系统行结尾,您只需要在选项卡上进行拆分。
''只要输入流接收到,就会发出事件 行尾输入(\ n,\ r或\ r \ n)。这通常发生在用户身上 按下
<Enter>
或<Return>
键。
const readline = require('readline');
const fs = require('fs');
const output = [];
const reader = readline.createInterface({
input: fs.createReadStream('data.txt')
});
reader.on('line', line => {
output.push(line.split('\t'));
});
reader.on('close', () => console.log(output));