# [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 )==