我想用逗号分割字符串以获取Node.js中的数组。
exports.test = function(rq, rs){
var mailList = "sharan@test.com,pradeep@test.com";
var arrayList = mailList.split(",");
console.log(mailList + " array lenght " + arrayList.length );
mailList = "";
arrayList = mailList.split(",");
console.log(mailList + " array lenght " + arrayList.length );
mailList = "sharan@test.com,";
console.log(mailList + " array lenght " + arrayList.length );
mailList = ",";
console.log(mailList + " array lenght " + arrayList.length );
rs.send("test here ");
}
控制台输出是:
sharan@test.com,pradeep@test.com array lenght 2
array lenght 1
sharan@test.com, array lenght 1
, array lenght 1
为什么JavaScript "".split()
返回一个包含一个元素而不是空数组的数组?
答案 0 :(得分:2)
返回的数组包含一个空字符串([""]
)。它以这种方式工作,因为直到第一个匹配(或字符串结尾)的所有内容都作为数组的第一个元素返回。在空字符串的情况下,这是一个空字符串。
如果您考虑分割算法的实现方式可能如何,这是有道理的。可能你从一个包含当前元素的空字符串开始,然后循环遍历字符串的字母,将它们添加到当前元素,直到到达字符串末尾或分隔符。然后将当前元素推送到结果数组。
如果您的长度为零的字符串,则以当前元素的空字符串开头。你直接到达最后,所以你将空字符串推送到结果数组并返回它。
这也是应该如何运作的。来自ECMAScript Language Specification:
如果此对象是(或转换为)空String,则结果取决于分隔符是否可以匹配空String。如果可以,结果数组不包含任何元素。否则,结果数组包含一个元素,即空字符串。
来自Mozilla:
找到后,将从字符串中删除分隔符,并在数组中返回子字符串。如果未找到separator或省略,则该数组包含一个由整个字符串组成的元素。
注意:当字符串为空时,
split()
返回一个包含一个空字符串的数组,而不是一个空数组。
如果你不喜欢这种行为,你可以为自己的版本制作原型:
//Return an empty array if string is empty.
//Otherwise return the result of the ordinary split.
String.prototype.split2 = function(separator) {
return this == "" ? [] : this.split(separator);
}
答案 1 :(得分:1)
第一个匹配前的所有内容都作为第一个元素返回。即使字符串为空。它不是空的
如果你想拆分并返回0长度数组,我建议你使用underscore.string module和words
方法:
_str.words("", ",");
// => []
_str.words("Foo", ",");
// => [ 'Foo' ]