分割

时间:2018-05-12 21:00:45

标签: javascript arrays node.js

出于某种原因,我最终将\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

上运行了代码

3 个答案:

答案 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是可选的,因为它位于?之前,意为zeroone
    • \n必须始终存在
  • 现在执行拆分后,我们执行map,它会在每个项目上执行一个函数,返回带有新结果的新数组。
    • 对于回调,我们在每个项目上调用trim,这将从每个项目的开头和结尾删除空白(不在其间)



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将为您处理多个操作系统行结尾,您只需要在选项卡上进行拆分。

  

&#39;&#39;只要输入流接收到,就会发出事件   行尾输入(\ 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));