JavaScript split添加了一个额外的空数组项?

时间:2015-11-26 06:45:40

标签: 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

但我感到困惑。 console.log(enStrings)输出:

[ 'Line 1', 'Line 2', 'Line 3', '' ]

为什么要添加最后一个空项目?以及如何删除它?

3 个答案:

答案 0 :(得分:4)

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

分裂前为什么不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 :(得分:1)

您可以使用filter

console.log(enStrings.filter(Boolean));

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

答案 2 :(得分:0)

你可以试试这个:

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