題目
完成解決方案,當第一個參數(String 型別)以第二個參數結尾時(也是 String 型別)返回 true。
例子:solution('abc', 'bc') // returns true
solution('abc', 'd') // returns false
拆解流程
依據題意可整理出以下重點:- 目標:比對第一個參數結尾是否等同於第二個參數
- 規則:參數傳入的都是字串型別
- 方法:使用
endsWith
方法,查找字串結尾是否有符合
程式撰寫
function solution(str, ending) {endsWidth
return str.endsWith(ending)
}
- 回傳:Boolean
- 此方法可傳入兩個參數:第一個參數是要比對的字串;第二個參數是從哪個結尾位置開始比對,可不傳入,預設為 str.length
- 注意:第一個參數不能傳入正規表達式,會回傳 TypeError
改善寫法
使用 substring 方法
MDN 上有說明 substr 方法已被棄用,因此這邊改為使用功能類似的 substring 方法撰寫
- 功能:擷取出指定字串
- 需要傳入兩個參數:第一個是起始索引,第二個是結束索引,擷取出的字串並「不包括」結束索引
- 回傳:字串型別,擷取出的新字串
- 參數規則:
- 若未寫入第二個參數,會從起始索引提取字符到結尾
- 如果 start === end,返回一個空字串
- 如果 start >= end,效果會像兩個參數調換位置
- 參數小於 0 或為 NaN 都會被視為等於 0;大於 str.length 會被視為 str.length
透過此方法可以擷取出和比對字串相同長度的字串,再透過邏輯運算子做比對
function solution(str, ending) {
return str.substring(str.length-ending.length) === ending
}
使用 slice 方法
和上面的方法很像,較為不同的是,參數若為負值,會從字符串結尾開始計算
function solution(str, ending) {
let endIndex = ending.length ? -ending.length : str.length
return str.slice(endIndex) === ending
}
裡面有一個測試是 solution('abc', '')
,需要回傳 true。
因此加入了三元運算子做判斷,當 ending.length 為 0 時回傳 str.length(因為 0 會被轉型成 false);不等於 0 時就回傳負值的 ending 字串長度,前者會回傳空字串,後者則會從字符串結尾開始擷取字串。
今天就介紹到這裡,如果大家有更好的寫法歡迎一起來討論~