鍍金池/ 教程/ HTML/ 大寫單詞首字母
備忘錄模式
解釋器模式
類似 Python 的 zip 函數(shù)
類變量和實例變量
提示參數(shù)
指數(shù)對數(shù)運算
檢查變量的類型是否為數(shù)組
由數(shù)組創(chuàng)建一個字符串
生成隨機數(shù)
刪除數(shù)組中的相同元素
大寫單詞首字母
雙向服務器
類的混合
計算復活節(jié)的日期
轉(zhuǎn)換弧度和度
找到上一個月(或下一個月)
雙向客戶端
橋接模式
嵌入 JavaScript
AJAX
觀察者模式
克隆對象(深度復制)
一個隨機整數(shù)函數(shù)
清理字符串前后的空白符
歸納數(shù)組
平方根倒數(shù)快速算法
適配器模式
打亂數(shù)組中的元素
將數(shù)組連接
使用數(shù)組來交換變量
更快的 Fibonacci 算法
服務器
服務端和客戶端的代碼重用
客戶端
查找子字符串
策略模式
CoffeeScrip 的 type 函數(shù)
由數(shù)組創(chuàng)建一個對象詞典
回調(diào)綁定
工廠方法模式
映射數(shù)組
當函數(shù)括號不可選
生成可預測的隨機數(shù)
不使用 jQuery 的 Ajax 請求
把字符串轉(zhuǎn)換為小寫形式
類方法和實例方法
擴展內(nèi)置對象
定義數(shù)組范圍
MongoDB
匹配字符串
創(chuàng)建一個不存在的對象字面值
列表推導
比較范圍
修飾模式
檢測每個元素
拆分字符串
字符串插值
對象數(shù)組
去抖動函數(shù)
使用 Nodeunit 測試
SQLite
單件模式
篩選數(shù)組
替換子字符串
數(shù)組最大值
計算(美國和加拿大的)感恩節(jié)日期
找到一個月中的最后一天
計算兩個日期中間的天數(shù)
基本的 HTTP 服務器
把字符串轉(zhuǎn)換為大寫形式
使用 HTML 命名實體替換 HTML 標簽
For 循環(huán)
模板方法模式
重復字符串
使用 Jasmine 測試
對象的鏈式調(diào)用
數(shù)學常數(shù)
反轉(zhuǎn)數(shù)組
計算月球的相位
使用 Heregexes
查找子字符串
生成器模式
遞歸函數(shù)
HTTP 客戶端
創(chuàng)建 jQuery 插件
檢測與構建丟失的函數(shù)
生成唯一ID
命令模式

大寫單詞首字母

問題

你想把字符串中每個單詞的首字母轉(zhuǎn)換為大寫形式。

解決方案

使用“拆分-映射-拼接”模式:先把字符串拆分成單詞,然后通過映射來大寫單詞第一個字母小寫其他字母,最后再將轉(zhuǎn)換后的單詞拼接成字符串。

("foo bar baz".split(' ').map (word) -> word[0].toUpperCase() + word[1..-1].toLowerCase()).join ' '
# => 'Foo Bar Baz'

或者使用列表推導(comprehension),也可以實現(xiàn)同樣的結(jié)果:

(word[0].toUpperCase() + word[1..-1].toLowerCase() for word in "foo   bar   baz".split /\s+/).join ' '
# => 'Foo Bar Baz'

討論

“拆分-映射-拼接”是一種常用的腳本編寫模式,可以追溯到Perl語言。如果能把這個功能直接通過“擴展類”放到String類里,就更方便了。

需要注意的是,“拆分-映射-拼接”模式存在兩個問題。第一個問題,只有在文本形式統(tǒng)一的情況下才能有效拆分文本。如果來源字符串中有分隔符包含多個空白符,就需要考慮怎么過濾掉多余的空單詞。一種解決方案是使用正則表達式來匹配空白符的串,而不是像前面那樣只匹配一個空格:

("foo    bar    baz".split(/\s+/).map (word) -> word[0].toUpperCase() + word[1..-1].toLowerCase()).join ' '
# => 'Foo Bar Baz'

但這樣做又會導致第二個問題:在結(jié)果字符串中,原來的空白符串經(jīng)過拼接就只剩下一個空格了。

不過,一般來說,這兩個問題還是可以接受的。所以,“拆分-映射-拼接”仍然是一種有效的技術。

上一篇:SQLite下一篇:類的混合