split()js最后一个数组项

时间:2017-02-13 18:40:15

标签: javascript string split

我是Web开发和JS的新手。

我在此字符串上使用String对象方法:

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

分割的分隔符是''以及空格。 我希望有3个项目的阵列,以及我将分析如何分裂。但是,我得到了这个:

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

有人可以向我解释为什么会发生这种情况? 提前谢谢!

5 个答案:

答案 0 :(得分:4)

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

这很难读,但这是我解释它... ...

步骤14指定$_SESSION始终通过抓取切片到字符串结束的位置结束:

  
      
  1. 设T是一个字符串值,等于S的子字符串,由p(包括)到s(不包括)位置的字符组成。
  2.   

然后将该片添加到输出数组中:

  
      
  1. 使用参数ToString(lengthA)调用A的[[DefineOwnProperty]]内部方法,属性描述符{[[Value]]:T,[[Writable]]:true,[[Enumerable]]:true,[[可配置]]:true}和false。
  2.   

请记住,split()的参数是分隔符(也称为分隔符)。

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

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

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

答案 1 :(得分:3)

split()函数有效地将字符串分成几部分并将这些部分放入一个数组中。函数(' ')的第一个参数是一个空格,意味着除法发生在有空格的地方。您的字符串'Look at me '中有三个空格或三个分区。如果你要拿一块长蛋糕并将其切三次,你最终会得到四个件。在现实世界中,你当然不会有第四块有效“空”或空白,但在计算机科学中,你只需要一件没有任何东西的东西。

@ppasler指出的解决方案是修剪你试图拆分的字符串中的多余空格。 trim()从字符串的开头和结尾删除空格,这意味着trim('Look at me ')会导致'Look at me'。如果您在结果字符串上使用split,则会得到:['Look', 'at', 'me']

答案 2 :(得分:1)

为什么会这样?

每次separator发生时,

split(separator, limit)都会拆分一个字符串。在你的情况下,separator也是字符串中的最后一个字符,这意味着它在那里分开,尽管之后没有任何内容(导致空字符串''

可以做些什么?

使用trim()删除前导空格和尾随空格,因此在拆分数组的末尾不会有空字符串。



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




答案 3 :(得分:1)

这是因为你的字符串在末尾包含一个空格。你字符串的最后一个空格是#34; 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(' '));

答案 4 :(得分:1)

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