String split返回一个包含两个元素而不是一个元素的数组

时间:2012-10-11 09:09:25

标签: javascript arrays string split

我不明白这种行为:

var string = 'a,b,c,d,e:10.';
var array = string.split ('.');

我希望如此:

console.log (array); // ['a,b,c,d,e:10']
console.log (array.length); // 1

但我明白了:

console.log (array); // ['a,b,c,d,e:10', '']
console.log (array.length); // 2

为什么返回两个元素而不是一个? split如何运作?

还有其他办法吗?

12 个答案:

答案 0 :(得分:73)

您可以添加过滤器以排除空字符串。

var string = 'a,b,c,d,e:10.';
var array = string.split ('.').filter(function(el) {return el.length != 0});

答案 1 :(得分:19)

用于排除空字符串的@xdazz version稍微简化的版本(使用ES6 arrow function):

var array = string.split('.').filter(x => x);

答案 2 :(得分:18)

这是正确和预期的行为。鉴于您已将分隔符包含在字符串中,split函数(简化)将分隔符左侧的部分(“a,b,c,d,e:10”)作为第一个元素和部分分隔符的其余部分(空字符串)作为第二个元素。

如果您对split()的工作方式非常好奇,可以在http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

查看ECMA规范(ECMA 262)的第148和149页。

答案 3 :(得分:4)

String.split()方法使用Array.filter()方法。

GROUP_CONCAT(it.u_ytkownik), GROUP_CONCAT(it.pok_j)

答案 4 :(得分:2)

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/split

首先修剪尾随期

'a,b,c,d,e:10.'.replace(/\.$/g,''); // gives "a,b,c,d,e:10"

然后拆分字符串

var array = 'a,b,c,d,e:10.'.replace(/\.$/g,'').split('.');

console.log(array.length); // 1

答案 5 :(得分:1)

那是因为字符串以.字符结尾 - 数组的第二项是空的。

如果字符串根本不包含.,您将拥有所需的一个项目数组。

split()方法的工作方式与此类似,只需用简单的词语解释:

  1. 在给定字符串中查找要拆分的给定字符串。如果未找到,则返回包含整个字符串的一个项目数组。
  2. 如果找到,则迭代给定的字符串,将每两次出现的字符串之间的字符拆分。
  3. 如果给定的字符串以要拆分的字符串开头,则结果数组的第一项将为空。
  4. 如果给定的字符串以要拆分的字符串结尾,则结果数组的最后一项将为空。
  5. 技术上更详细地解释here,它对所有浏览器来说都是一样的。

答案 6 :(得分:1)

如此; [String.prototype] split(separator, limit)返回正常限制参数为空。

"".split(",") // [""]

"a,b,c.".split(".", 1) // ["a,b,c"]

如果你不能这样做,没有限制参数。我认为这是正常的操作...

答案 7 :(得分:0)

好吧,split会做它做的事情,它会分裂你的字符串。只是分裂的第二部分是空的。

答案 8 :(得分:0)

因为你的字符串由2部分组成:

1:a,b,c,d,e:10

2:空

如果你在最后没有点的情况下尝试:

var string = 'a,b,c:10';
var array = string.split ('.');

输出是:

["a,b,c:10"]

答案 9 :(得分:0)

你有一个字符串,其中一个“。”在它中,当你使用string.split('。')时,你会收到包含第一个元素的数组,其中包含“。”之前的字符串内容。字符和第二个元素,字符串的内容在“。”之后。 - 在这种情况下是空字符串。

所以,这种行为是正常的。你想通过使用这个string.split来实现什么?

答案 10 :(得分:0)

根据MDN web docs

  

注意:当字符串为空时,split()返回一个包含以下内容的数组   一个空字符串,而不是一个空数组。如果字符串和   分隔符都是空字符串,返回一个空数组。

const myString = '';
const splits = myString.split();

console.log(splits); 

// ↪ [""]

答案 11 :(得分:-1)

试试这个

javascript通过split函数提供两个数组,然后

var Val = "abc@gmail.com";
var mail = Val.split('@');

if(mail[0] && mail[1])  {   alert('valid'); }
else    {   alert('Enter valid email id');  valid=0;    }

如果两个数组都包含大于0的长度,则条件为真