iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
自我挑戰組

解三十天的 CodeWars系列 第 5

The Hashtag Generator

  • 分享至 

  • xImage
  •  

CodeWars 題目

Link

難度

5 kyu

題目

將傳入函數的字串,以駝峰式的方式轉換為 hashtag 形式,並限制長度。

思路

傳入的字串可能有數量不等的空格,但是不能在一開始就把空格取代。
必須利用空格來產生陣列,來能確保駝峰顯示的大寫首字元。

因此先轉為陣列形式、判斷陣列長度,先決定是否要繼續運算。
如果沒超出限制再作後續處理。

pseudo code

str = str.split(" ")
str.filter(item => item !== " ")
if(str.length < 140) return false
str.map(item => item[0].toUpper)

return str.join("")

實作

function generateHashtag (str) {
  str = str.split(" ").filter(String);
  if(str.length >= 140 || str.length == 0) return false;
  
  for(let i=0;i<str.length;i++){
    if(str[i].length >= 140) return false;
    str[i] = str[i].replace(/^[a-z]/,match=> match.toUpperCase())
  }
  
  return "#" + str.join("");
}

將傳入的字串轉為陣列; filter(String) 過濾空字串,因為空字串會被視為false
設定 if 條件:如果陣列長度 ≥ 140,或者空陣列就直接返回 false。
用 for 迴圈跑每一個陣列元素;如果陣列元素 ≥ 140 就返回 false。

用正則表達式獲取第一個首字幕,判斷如果是小寫的話就改成大寫後返回。
最後 return 與 # 拼接的字串。

他人的解法

function generateHashtag (str) {

  var hashtag = str.split(' ').reduce(function(tag, word) {
    return tag + word.charAt(0).toUpperCase() + word.substring(1);
  }, '#');
  
  return hashtag.length == 1 || hashtag.length > 140 ? false : hashtag;
}

將字串轉為陣列後,使用陣列方法 reduce 取得轉換後的字串。
#作為第一個起始值,會作為 tag 的值傳入函數;word 帶入每一次被調用到的陣列元素;並且取得第一個字元轉換為大寫;然後 substring 拼接剩餘字串。

最後三元運算子驗證 reduce 產生的字串長度,如果為 1 或者結果大於 140,就返回 false;否則返回字串本身。

心得

不知不覺來到第五天了,一個小小的里程碑!🥹


上一篇
RGB To Hex Conversion
下一篇
Pete, the baker
系列文
解三十天的 CodeWars30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言