2017-02-13 107 views
3

我是web开发新手,尤其是JS。split()js最后一个数组项目

我使用一个字符串对象方法拆分此字符串:

let str = 'Look at me '; //last character is space 
console.log(str.split(' ')); 

的隔板分裂为“”以及空间。 我希望有一个3个项目的数组,以及我不知道如何分裂的作品。然而,我得到这个:

['Look', 'at', 'me', ''] 

有人可以解释为什么会发生这种情况吗? 在此先感谢!

回答

1

为什么会发生?

split(separator, limit)每次发生分割字符串separator。在你的情况下,separator也是字符串中的最后一个字符,这意味着它在那里分裂,虽然之后没有任何东西(导致空字符串''

可以做些什么?

使用trim()删除前导空白和尾随空白,所以在拆分数组末尾不会有空字符串。

let str = 'Look at me '; //last character is space 
 
console.log(str.trim().split(" "));

+8

这并不能解释为什么会发生? –

+4

对不起,我需要的是什么发生了解释,但不是如何纠正它 – lessismore

+0

虽然,它在技术上是准确的 –

1

这是因为你的字符串包含在后面加上一个空格。你的字符串的最后一个空格是“split”,在左边有一个单词('me'),右边是一个空字符串('');这就是split的工作方式。您可以查看以供参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

如果你想删除最后一个元素,最后删除多余的空间。你可以做,使用trim

let str = 'Look at me '; //last character is space 
console.log(str.trim().split(' ')); 
3

split()功能有效地把字符串成片,并把这些作品到一个数组。函数(' ')的第一个参数是一个空白空间,这意味着只要有空格就会发生分割。你的字符串,'Look at me '有三个空格,或三个分区。如果你要拿一块蛋糕并将其切三次,那么最终会有四个件。在现实世界中,你当然不会有第四块实际上是“空洞”或空白的,但是在计算机科学中,你只会得到一块没有任何内容的额外块。

正如@ppasler所述,解决方案是从您尝试拆分的字符串中删除多余的空格。 trim()从字符串的开头和结尾删除空格,表示trim('Look at me ')将导致。如果你然后使用分割结果字符串,你会得到:['Look', 'at', 'me']

+0

谢谢!现在我深入了解它! – lessismore

+0

很高兴看到有人比回答本身更关心理解答案。 –

+0

我想这是问任何问题的最佳部分和主要动机。 – lessismore

1

发生这种情况是因为str.split(" ")返回字符串值,直到输入没有更多字符,并且每次NEXT字符是您传递的输入字符时更改为下一个数组元素。并且由于您的输入在结尾处具有空格字符,因此来自split方法的最后返回值将为空。

3

ECMA-262在JavaScript中指定了how split() is implemented

这是相当难以阅读,但这里是我的刺在解释它...

第14步指定的split()总是向上抓住切片到字符串的结束而结束:

  • 设T是一个字符串值,等于S的子字符串,由位置p(含)到s(不含)的字符组成。
  • 即切片然后被添加到输出的数组:

  • 呼叫A的以ToString的[[DefineOwnProperty]]内部方法(lengthA ),属性描述符{[[Value]]:T,[[Writable]]:true,[[Enumerable]]:true,[[Configurable]]:true}和false。
  • 记住split()的参数是一个定界符(也称为分离器)。

    "ABC".split("B")"B"作为分隔符,分隔子字符串"A""C"

    "ABC".split("C")"C"作为分隔符,分隔子字符串"AB"""。是的,空字符串仍然是一个字符串,因此"C"将子字符串"AB"与子字符串""分开。

    你的例子是一样的,除了代替"C",你有一个空格字符" "。空间在任何方面都不是特殊的,所以同样的规则适用:它将前面的子字符串与子字符串分开(它恰好是空的)。

    +0

    感谢您的回答! 空字符串的部分现在对我来说更加清晰。 – lessismore