2016-08-20 99 views
0

這是我第一次在這裏發表,我對編碼非常陌生。for/in循環中的計數器變量

我想大寫任何給定字符串的每個單詞中的第一個字母。我已將字符串分成單獨的字母,並使用for/in循環遍歷每個字母。

這是我到目前爲止有:

function LetterCapitalize(str) { 

    var split = str.split(''); 

    for (var i in split) { 
    if (i === 0) { 
     split[i] = split[i].toUpperCase(); 
    } else if (split[i] === " ") { 
     split[i+1] = split[i+1].toUpperCase(); 
    } 
    } 

    str = split.join(''); 

    return str; 

} 

console.log(LetterCapitalize('hello world')); 

我不斷收到一個錯誤「遺漏的類型錯誤:無法讀取屬性‘’的未定義」

toUpperCase我在做什麼錯。做什麼我想做什麼更好的方式是什麼?

+1

另一種選擇,你可以使用CSS來代替,以'文本轉換:大寫;':) – Delosdos

+2

[不使用'對...有陣列in'(http://stackoverflow.com /問題/ 500504 /爲什麼 - 是 - 使用換的,與陣列迭代-A-壞主意)。 'i'是一個字符串,所以在索引5處你會得到'「5」+1 ===「51」'。 – JJJ

+0

哈哈,是的!這意味着更多的JavaScript思想練習來幫助我學習語言,CSS會作弊:) – anytimesoon

回答

2

看看吧!

var str = 'i am a string'; 
var arr = str.split(' '); 

var final_str = arr.map(function (item) { 
    return item[0].toUpperCase()+item.slice(1); 
}).join(' '); 

console.log(final_str); 
+0

這是一個很好的解決方案!好工作!比我的整潔:-) –

+0

這看起來不錯,但我不知道我明白str是如何傳遞給final_str的。這是否需要分開進行? – anytimesoon

+0

要從單詞列表中獲得final_str,您必須執行2個步驟。首先檢查每個元素並將其大寫=>因此,您會獲得新的大寫字母數組。其次,你必須加入所有處理元素與空間字符 – KmasterYC