简体   繁体   中英

JavaScript split add an extra empty array item?

The following code reads a file and turned each line into array items:

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

  enStrings = data.split(/[\r\n]+/g)
}

en.txt looks like this:

Line 1
Line 2
Line 3

But I'm puzzled. console.log(enStrings) outputs this:

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

Why is that last empty item being added? And how to remove it?

This would happen if your text file has a trailing new line character, which is common.

Why not trim before splitting?

enStrings = data.trim().split(/[\r\n]+/g);

Alternately, you could remove just the trailing new line characters before splitting.

enStrings = data.replace(/[\n\r]+$/, '').split(/[\r\n]+/g)

However, if your data is long, you may want to avoid the performance hit of recreating the entire string before splitting. If that is the case, you could use the following to pop it off the end.

if (enStrings.length && !enStrings[enStrings.length-1]) {
    enStrings.pop();
}

You may use filter :

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

Empty strings are falsy value so using .filter(Boolean) will only list the truthy value and removes the empty strings from your array.

You can try this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM