---
# System prepended metadata

title: '[Codewars - 7kyu解題] Get the Middle Character 擷取位於字串正中間的字母'
tags: [Math.floor(), Javascript, .slice(), 7kyu, Codewars, .substring(), Math.ceil(), .substr(), Array]

---

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



