Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
內容目錄
透過 generateHashtag()
函式來產生主題標籤 (hashtag),其規則如下:
false
。false
。function generateHashtag (str) { if( str.match(/\w{1,}/) === null ) return false; let final = '#' + str.split(/\s+/).map( function(w){ return w[0].toUpperCase()+w.slice(1) } ).join( '' ); return final.length > 140 ? false : final; }
原本評選的最佳解法沒有辦法處理字串過長的問題,因此將其淘汰,改選第二高票的作法。
function generateHashtag (str) { if(!str || str.length < 1) return false; var r = '#' + str.split(' ').map(function(el) { return el.charAt(0).toUpperCase() + el.slice(1).toLowerCase(); }).join(''); return r.length > 140?false:r; }
第二高票的作法當中,並沒有辦法排除掉全部使用空格的情況,例如:' '
。此外,留言中也有人提到,並非每次都該使用 toLowerCase()
的方式,將後續字串變成小寫,因為「縮寫」的時候會產生未預期的結果 (NASA 變成 Nasa)。
這次參考了其他人的解法後發現,可能是這一題有多次經過修改,所以許多舊的解法其實已經不適用了。因此,某種程度上,這次我自己的解答也可以當作是最佳解吧(笑)
這次有忍住不用 map()
的方式來進行,其實和大部分的解決方式都差不多。可以調整的地方應該是第一步,也許可以不需要用規則運算式來判斷,會更有效率?
需要注意的另一點,在利用 map()
進行置換的時候,我使用的是中括號 [0]
的方式來指定首位字元,而其他人的寫法則是 charAt(0)
。上網搜尋了一下差異,我的作法是在 ES5 以後的近代語法,在 IE8 以前的瀏覽器是不支援的。