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

Wil*_*ilk 36 javascript arrays string split

我不明白这种行为:

var string = 'a,b,c,d,e:10.';
var array = string.split ('.');
Run Code Online (Sandbox Code Playgroud)

我期待这个:

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

但是我得到了这个:

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

为什么返回两个元素而不是一个?怎么样split

还有另一种方法吗?

xda*_*azz 83

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

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

  • 这应该是公认的答案,因为它解决了问题 - 返回预期的内容 - 而不是链接到某些文档. (9认同)
  • 请注意`filter()`是一个ECMAScript 5数组函数,因此如果您的浏览器不支持此功能,则需要包含其他代码才能使用此功能.请查看[此处](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter)以获取更多信息以及实现此方法所需的代码. (3认同)

mar*_*mor 23

一个稍微简单的@xdazz版本用于排除空字符串(使用ES6箭头功能):

var array = string.split('.').filter(x => x);
Run Code Online (Sandbox Code Playgroud)


Ing*_*ngo 20

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

如果您对split()的工作方式非常好奇,可以访问http://www.ecma-international.org/publications/files/ECMA-ST/查看 ECMA规范(ECMA 262)的第148和149页. ECMA-262.pdf

  • 以下是方法规范的直接链接:http://es5.github.com/#x15.5.4.14. (4认同)

Roh*_*dal 6

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

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

console.log(array); // [a,b,c,d,e:10]
console.log (array.length); // 1
Run Code Online (Sandbox Code Playgroud)