JavaScript中的split方法会增加一个额外的空数组项吗?

4
以下代码读取一个文件,并把每一行变成数组项:
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

但是我感到困惑。 console.log(enStrings) 输出如下内容:
[ 'Line 1', 'Line 2', 'Line 3', '' ]

为什么会添加最后一个空项?如何移除它?

由于您正在使用换行符进行拆分,因此可以理解文件末尾会有一个空行标记。在读取文件后,您可能需要显式地删除空行。 - CalebB
3个回答

7

如果您的文本文件有一个尾随的换行符,那么就会发生这种情况,这是很常见的。

为什么不在切割之前 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();
}

1
你可以使用filter
console.log(enStrings.filter(Boolean));

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

0
你可以尝试这个:
enStrings = data.split(/[\r\n]+/g);
enStrings.splice($.inArray('', enStrings), 1);

@AlexanderO'Mara 我刚刚编辑了我的答案,你可以再次检查。 - Tân

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接