我不明白这种行为:
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
如何运作?
还有其他办法吗?
答案 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)
答案 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()
方法的工作方式与此类似,只需用简单的词语解释:
技术上更详细地解释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的长度,则条件为真