# [Codewars - 7kyu解題] Get the Middle Character 擷取位於字串正中間的字母 ###### tags: `Codewars`,`7kyu`,`Javascript`,`Array`,`.slice()`,`Math.ceil()`,`Math.floor()`,`.substr()`,`.substring()` > Javascript菜鳥紀錄Codewars解題過程 ## Instructions 題目 :link: https://www.codewars.com/kata/56747fd5cb988479af000028 :pushpin: **Instructions:** 字串字母個數若是奇數,回傳字串正中間的字母。 字串字母個數若是偶數,回傳字串正中間的2個字母。 You are going to be given a word. Your job is to return the middle character of the word. If the word's length is odd, return the middle character. If the word's length is even, return the middle 2 characters. :bulb: **Examples:** Kata.getMiddle("test") should return "es" Kata.getMiddle("testing") should return "t" Kata.getMiddle("middle") should return "dd" Kata.getMiddle("A") should return "A" ## My Solution 我的解法 ```javascript= function getMiddle(s) { var str = s.split(''); var len = str.length; return (len%2==1)?str.slice((len-1)/2,(len+1)/2).toString():str.slice((len/2)-1,len/2+1).join(''); } ``` ## Solutions(1) 其他更精簡的寫法 ```javascript= function getMiddle(s) { return s.substring(Math.ceil(s.length/2)-1, Math.floor(s.length/2)+1) } ``` ## Solutions(2) 其他更精簡的寫法 ```javascript= function getMiddle(s) { return s.substr(Math.ceil(s.length / 2 - 1), s.length % 2 === 0 ? 2 : 1); } ``` ## :memo: 學習筆記 :bulb: **Array.prototype.slice()** https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/slice > > 回傳一個包含提取之元素的新陣列。。 --- :bulb: **Math.ceil()** https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil > > 回傳一個大於等於指定數字的最小整數。 --- :bulb: **Math.floor()** https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil > > 回傳小於等於所給數字的最大整數。 --- :bulb: **[JS] substr 和 substring 的差異** https://blog.typeart.cc/JavaScript%20substr,%20substring%20%E6%AF%94%E8%BC%83/ > **ECMAscript沒有將substr方法納入標準,較不建議使用** > > substring 從開始擷取至設定的結尾字符前一個位置,範圍參數不能使用負數: > ==String.substring( Start , End )== > > substr 從開始結取特定的字串長度,範圍參數可以使用負數: > ==String.substr( Start , Length )==