iT邦幫忙

0

【2023 挑戰賽 Day7】 #JS 字符 loop

  • 分享至 

  • xImage
  •  

閒聊時間

鐵人賽到第 7 天了!當初參賽的初衷是希望能好好面對讓我恐懼的 JS 面試考題,不過現在準備去新公司報到了,也想學一些測試或資安相關的東西,後面幾篇也許會安排我在新領域的學習心得。加油!我可以撐完 30 天的!只剩 23 天了 XD

開頭先跟大家閒聊,昨天在上踢拳擊課時,教練安排訓練左右手腳的協調性。因為踢拳不只可以用手,也很依賴腳的攻擊。有時上課要做連踢 10 次或做一連串 combo 組合動作時,我常埋怨自己反應太慢或協調性太差,很羨慕其他學姊長都可以做得很順暢又有力。

教練說:「很多人會說自己協調性不好,當你一直去找它,它也會來找你,只要繼續找下去,總有一天你們就會找到彼此了。」

教練的一番話很哲學吧?相信學習新事物的過程都是類似的。

https://ithelp.ithome.com.tw/upload/images/20230919/20163153gtHOCTxKvD.jpg

我的第一副拳擊手套,在轉職的過程中拳擊給我很多陪伴,希望今年我也能考過拳館安排的進階學員考試,不僅工作有所成長,運動能力也一起提升!

JS:康威的看說序列

題目描述:

請寫出一個 lookSay()函數,函數接受整數的數字做為參數,該函數返回的結果跟數學家康威的「看說序列」有關係,鮮寫出數字的數量、再寫出數字本身,且是連續的組合在一起。

例如
當參數為 1 ,可以稱為一個 1,於是輸出為 11
當參數為 12,可以稱為一個 1、一個 2,於是輸出為 1112
當參數為 112,可以稱為兩個1、一個2,於是輸出為 2112

解答:


function lookSay(number){
   
    const numString = number.toString() // 將 input 數字轉為字串
    const stringLastIndex = numString.length // 以字串長度作為 for loop 檢查的迴圈數
    let repeated = 1 ; // 宣告數字的重複值,至少為 1
    let result = '' // 宣告最後輸出的字串
    
    for(let i = 0; i<stringLastIndex; i++){
      if(numString.charAt(i) === numString.charAt(i+1)){
        // 計算重複的數字,直到下一個位置的字符不同,就進入 else,把目前的字符串在一起
        repeated ++
      }else{
        // 在迴圈檢查至最後一個字符之前,先把前面字符計算重複的結果串在一起
        result = result + `${repeated}`+ `${numString.charAt(i)}`
        repeated = 1 // 將重複值重置為 1
      }
    }
  //將字符轉成數字
  return parseInt(result)
}

console.log(lookSay(1133)) // 2123
console.log(lookSay(55555666666)) // 5566

在這題我們除了用到昨天學到的 str.charAt() 方法來提取字串內的字符之外,也使用 parseInt() 來把字串轉回數字。

JS 方法:

parseInt() 能將輸入的字串轉成整數,且忽略掉 0 與空格。例如:

console.log(parseInt('   123 '));
// 123 (whitespace is ignored)
console.log(parseInt('077'));
// 77 (leading zeros are ignored)

今天的文章就到這邊,誠實地說,我都是一邊查資料一邊做題的。

面試時就算被允許上網查資料,我都會緊張到很難找到正確的答案,希望自己對於相關工具跟方法的處理會更熟悉一些,之後在解題上就可以更順利一點。

那麼我們明天見~


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言