字串 是 JavaScript 用來儲存文字資料的資料型態。
建立字串的方式,就是把文字用單引號或雙引號包起來。在 Exercism 上,我們使用單引號。
'Hello, World!'
"Hello, World!"
字串可以視為一個字元陣列,其中第一個字元的索引是0。你可以用方括號搭配想取得的字母索引,來存取字串中的單一字元。
'cat'[1];
// => 'a'
你可以透過 length 屬性取得字串中的字元數。
'cat'.length;
// => 3
串接字串最簡單的方式,就是使用加法運算子 +。
'I like' + ' ' + 'cats.';
// => "I like cats."
字串提供了許多輔助方法,完整清單請見 MDN 的字串方法文件。以下列出一些常用的輔助方法。
toUpperCase與toLowerCase:改變所有字元的大小寫trim:移除開頭與結尾的空白includes、startsWith與endsWith:判斷另一個字串是否屬於給定的字串slice:取出字串中的某一段在 JavaScript 中,字串是不可變的。因此所謂的「修改」,例如透過上面某些方法,實際上都會改為建立一個新的字串。
鎮上新開了一間詩社,你正考慮要不要去參加。 因為過去曾經發生過一些事,這間詩社有一套非常嚴格的入場規定,你得先摸清楚才能進門喔。
詩社有兩扇門,一扇前門、一扇後門,兩邊都有人看守。 想進去的話,你得先想出當天的密碼。
密碼一律以一首詩為基礎,可以透過兩個步驟推導出來。
流程的細節取決於你想進的是哪一扇門。
為了得出前門密碼的字母,你要回應守衛唸給你的那行詩的第一個字母。
為了讓密碼好看一點,詩社成員喜歡用_藏頭詩_。 也就是說,每個句子的第一個字母會拼成一個單字。 以下是他們最喜歡的作家之一 Michael Lockwood 的作品。
Stands so high
Huge hooves too
Impatiently waits for
Reins and harness
Eager to leave
所以當守衛唸Stands so high時,你要回答S;當守衛唸Huge hooves too時,你要回答H。
請實作函式frontDoorResponse,它接受一行詩作為引數,並回傳那一行的第一個字母。
frontDoorResponse('Stands so high');
// => "S"
既然你已經收集到所有正確的字母,接下來只要把單字正確地改成首字母大寫,就能得到前門的密碼。
請實作函式frontDoorPassword,它接受一個字串(你在第 1 項任務中找到的字母組合),並回傳首字母正確大寫的結果。
frontDoorPassword('SHIRE');
// => "Shire"
frontDoorPassword('shire');
// => "Shire"
為了得出後門密碼的字母,你要回應守衛唸給你的那行詩的最後一個字母。
詩社成員真的很聰明。 前面提到的那首詩同時也是_藏尾詩_,意思是每個句子的最後一個字母也會拼成一個單字:
Stands so high
Huge hooves too
Impatiently waits for
Reins and harness
Eager to leave
當守衛唸Stands so high時,你要回答h;當守衛唸Huge hooves too時,你要回答o。
要注意的是,守衛有時會在一行的開頭或結尾加入風格上的停頓(也就是空白字元)。 你需要忽略這些停頓,才能得出正確的字母。
請實作函式backDoorResponse,它接受一行詩作為引數,並回傳那一行中最後一個不是空白字元的字母。
backDoorResponse('Stands so high');
// => "h"
backDoorResponse('Stands so high ');
// => "h"
想從後門進入詩社,你得格外有禮貌。
所以這次推導密碼時,除了要把單字正確地改成首字母大寫,還要在結尾加上', please'。
請實作函式backDoorPassword,它接受一個字串(你在第 3 項任務中找到的字母組合),並回傳加上禮貌用語後的大寫密碼。
backDoorPassword('horse');
// => "Horse, please"