2017-02-13 345 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

    相關問題