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);