---
# System prepended metadata

title: '[Codewars - 6kyu解題] Replace With Alphabet Position 字母替換成數字'
tags: [.charCodeAt(), RegExp, Javascript, 6kyu, .forEach(), Codewars, .match(), ifelse in forEach(), Array]

---

# [Codewars - 6kyu解題] Replace With Alphabet Position 字母替換成數字

###### tags: `Codewars`,`6kyu`,`Javascript`,`Array`,`.forEach()`,`ifelse in forEach()`,`.charCodeAt()`,`.match()`,`RegExp`

> Javascript菜鳥紀錄Codewars解題過程

## Instructions 題目
:link: https://www.codewars.com/kata/546f922b54af40e1e90001da

:pushpin: **Instructions:** 
接收一組字串，並按序回傳字母所代表的數字("a" = 1, "b" = 2, etc)，若不是字母的話則忽略不回傳。
In this kata you are required to, given a string, replace every letter with its position in the alphabet.

If anything in the text isn't a letter, ignore it and don't return it.

"a" = 1, "b" = 2, etc.

:bulb: **Examples:** 

alphabetPosition("The sunset sets at twelve o' clock.")
Should return "20 8 5 19 21 14 19 5 20 19 5 20 19 1 20 20 23 5 12 22 5 15 3 12 15 3 11" (as a string)




## My Solution 我的解法

```javascript=
function alphabetPosition(text) {
  var str = []
  var res = []
  text.split('').forEach(i => str.push(i.charCodeAt()));
  str.forEach(item => {
    if(item>=65&&item<=90){
        res.push(item-64);}
    else if(item>=97&&item<=122){
        res.push(item-96);}
    else{}
   });

  return res.join(' ');
}
```





## Solutions(1) 其他更精簡的寫法
```javascript=
function alphabetPosition(text) {
  return text
    .toUpperCase()
    .match(/[a-z]/gi)
    .map( (c) => c.charCodeAt() - 64)
    .join(' ');
}
```

## Solutions(2) 其他更精簡的寫法
```javascript=
function alphabetPosition(text) {
  return text.match(/[a-zA-Z]/g)
  .map( (el) => el.toLowerCase().charCodeAt() - 96 ).join(' ');
}
```


## :memo: 學習筆記

:bulb: **If else in foreach**
https://stackoverflow.com/questions/50528628/if-else-in-foreach
> 
> forEach()內使用if/else 判斷式的寫法。
>
```javascript=
arr.forEach(element => {
     if(element.key === 'first') {
        // do something
     } else { 
        // do something else
     }

     if(element.key === 'second') {
        // do something
     } else { 
        // do something else
     }         
  });
```




---
:bulb: **Switch...case...break**
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/switch
> switch 會比對一個 表達式 裡頭的值是否符合 case 條件，然後執行跟這個條件相關的 陳述式, 以及此一符合條件以外，剩下其他條件裡的陳述式。
> 
> 一個 switch 陳述式會先評估自己的 expression。然後他會按照 case 條件順序開始尋找，直到比對到第一個表達式值跟輸入 expression 的值相等的 case 條件（使用嚴格的邏輯運算子, ===）並把控制流交給該子句、並執行裡面的陳述式
>
> **switch 一般只在多條件判斷使用，但無法像if/else使用運算式進行判斷。**


---

:bulb: **.match(/[aeiou]/gi)**
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/String/match
> 
> 用.match( ) 方法，結合正規表示式進行比對
> 找出陣列元素符合a、e、i、o、u，全域比對，忽略大小寫
> 

:bulb: **正規表示式RegExp**
http://syunguo.blogspot.com/2013/04/jsregular-expressions.html

https://felixhuang.pixnet.net/blog/post/23673013-%5Bjavascript%5D-%E6%AD%A3%E8%A6%8F%E5%8C%96%E8%A1%A8%E7%A4%BA%E6%B3%95%E9%80%9F%E6%9F%A5%E8%A1%A8

https://atedev.wordpress.com/2007/11/23/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA%E5%BC%8F-regular-expression/



