Split()函数在一个单字符上返回一个带有2个空字符串的数组?

18 浏览
0 Comments

Split()函数在一个单字符上返回一个带有2个空字符串的数组?

我在一个(基于动态/用户输入的)字符串上调用了split()方法,并对返回的数组中的每个元素进行了操作。偶尔我会遇到一个只有一个字符('/')的字符串,这给我带来了一些意外的结果(至少对我来说是意外的)。

如果我这样调用:

var randomString = '/';
var splitString = randomString.split('/');

splitString返回的值是["", ""]。我原本期望只收到[""]

为什么返回的数组中会有两个空字符串呢?我找不到任何关于这种情况的文档或示例。另外,在这个例子中,如果我只想接收一个空字符串,最好的方法是什么?只需移除最后一个空字符串吗?

谢谢

0
0 Comments

问题的出现的原因是split()函数的实现方式。该函数遍历字符串,寻找传入的分隔符,并将字符串的左部分存储起来。这是一个简单的split函数的版本,条件是它只匹配一个字符的分隔符。

解决方法是使用String.prototype.split()方法,该方法的实现方式不同于上述的简单版本。但是,它应该遵循相同的逻辑(需要考虑更复杂的分隔符,如单词或正则表达式)。

因此,当使用简单版本的split()函数时,返回的结果是两个空字符串的数组。原因如下:

- substring默认是一个空字符串("")。

- 在找到分隔符后,将substring(一个空字符串)保存到results数组中,然后再次将其设置为空字符串。

- 最后,在检查整个字符串后(在这种情况下,只有一个字符"/"),剩余的substring(也是一个空字符串)保存到results中。

需要注意的是,split()函数不限制返回为两个元素的数组,它可以返回与原始字符串长度相同的数组(例如,使用空字符串分隔符调用它时)。

0
0 Comments

使用split()函数将字符串按照指定的字符(本例中为'/')进行分割,返回分割后的数组。如果分割的字符存在于字符串中,则返回分割字符之前和之后的内容,例如var randomString = 'Joe/Bill',结果为["Joe", "Bill"]。但是在这个问题中,分割字符之前和之后都没有内容,因此返回["", ""]

如Oussail所说,如果在之后添加.filter(Boolean),它会移除数组中的空字符串,最终返回一个空数组[]

.filter(Boolean)会移除数组中的空字符串,参考链接:https://stackoverflow.com/a/54623591/12825520

你可以通过以下方式检查这种情况:

var randomString = '/';
var splitString = randomString.split('/');
// 从结果中移除空字符串
splitString = splitString.filter(Boolean);
if (splitString.length === 0) {
   // 在这里处理特殊情况
   // 可能需要对其进行特殊处理
}

0