[英]JavaScript split gives array size one instead of zero for empty string
我想用逗号分割一个字符串以在 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()
返回一个包含一个元素的数组而不是一个空数组?
返回的数组包含一个空字符串 ( [""]
)。 它以这种方式工作,因为直到第一个匹配项(或字符串结尾)为止的所有内容都作为数组的第一个元素返回。 在空字符串的情况下,这是一个空字符串。
如果您考虑拆分算法的实现可能是什么样子,这是有道理的。 可能您从包含当前元素的空字符串开始,然后遍历字符串的字母,将它们添加到当前元素,直到到达字符串的末尾或分隔符。 然后将当前元素推送到结果数组上。
如果您的字符串长度为零,则从当前元素的空字符串开始。 您直接到达末尾,因此您将空字符串推送到结果数组并返回它。
这也是它应该如何工作。 来自ECMAScript 语言规范:
如果 this 对象是(或转换为)空字符串,则结果取决于分隔符是否可以匹配空字符串。 如果可以,则结果数组不包含任何元素。 否则,结果数组包含一个元素,即空字符串。
来自Mozilla :
找到后,从字符串中删除分隔符,并在数组中返回子字符串。 如果未找到或省略了分隔符,则数组包含一个由整个字符串组成的元素。
注意:当字符串为空时,
split()
返回一个包含一个空字符串的数组,而不是一个空数组。
如果您不喜欢这种行为,可以编写自己的版本:
//Return an empty array if string is empty.
//Otherwise return the result of the ordinary split.
split2 = (separator) => this == "" ? [] : this.split(separator);
第一次匹配之前的所有内容都作为第一个元素返回。 即使字符串为空。 它不是空的
如果你想拆分并返回一个长度为 0 的数组,我建议你使用underscore.string 模块和words
方法:
_str.words("", ",");
// => []
_str.words("Foo", ",");
// => [ 'Foo' ]
一种方法是检查拆分数组的第一个值是否为空
var arrayList = mailList.split(",");
if(arrayList[0] != ""){
arrayLength = arrayList.length;
}else{
arrayLength = 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.