JavaScript拆分是否添加额外的空数组项?

JavaScript拆分是否添加额外的空数组项?,javascript,Javascript,以下代码读取一个文件,并将每行转换为数组项: fs.readFile('en.txt', 'utf8', function (err, data) { if (err) { return console.log(err) } enStrings = data.split(/[\r\n]+/g) } en.txt如下所示: Line 1 Line 2 Line 3 但我很困惑控制台.log(enStrings)输出以下内容: [ 'Line 1', 'Line 2', '

以下代码读取一个文件,并将每行转换为数组项:

fs.readFile('en.txt', 'utf8', function (err, data) {
  if (err) {
    return console.log(err)
  }

  enStrings = data.split(/[\r\n]+/g)
}
en.txt
如下所示:

Line 1
Line 2
Line 3
但我很困惑<代码>控制台.log(enStrings)输出以下内容:

[ 'Line 1', 'Line 2', 'Line 3', '' ]
为什么要添加最后一个空项?如何移除它?

您可以使用:


空字符串是伪值,因此使用
.filter(Boolean)
将只列出伪值并从数组中删除空字符串。

如果文本文件具有尾随新行字符(这是常见的),则会发生这种情况

为什么不在拆分前进行
trim

enStrings = data.trim().split(/[\r\n]+/g);
或者,您可以在拆分之前只删除尾随的新行字符

enStrings = data.replace(/[\n\r]+$/, '').split(/[\r\n]+/g)
但是,如果您的数据很长,您可能希望避免在拆分之前重新创建整个字符串的性能影响。如果是这样的话,你可以用下面的方法把它从末尾弹出

if (enStrings.length && !enStrings[enStrings.length-1]) {
    enStrings.pop();
}
您可以尝试以下方法:

enStrings = data.split(/[\r\n]+/g);
enStrings.splice($.inArray('', enStrings), 1);

由于您是按新行字符拆分的,因此可以理解文件末尾会有一条空行。您可能需要在读取文件后显式删除空行。@AlexanderO'Mara我只是编辑了我的答案,您可以再次检查
enStrings = data.split(/[\r\n]+/g);
enStrings.splice($.inArray('', enStrings), 1);