2017-01-19 147 views
0

我知道CSS屬性text-transform: capitalize,但任何人都可以使用Javascript來複制此內容嗎?大寫字符串

我想傳遞一個參數給我的函數,它將返回大寫每個單詞首字母的字符串。

我遠了這一點,但我堅持試圖打破我的字符串數組中塊:

function upper(x){ 
    x = x.split(" "); 

    // this function should return chunks but when called I'm getting undefined 
    Array.prototype.chunk = function (n) { 
     return [ this.slice(0, n) ].concat(this.slice(n).chunk(n)); 
    }; 

    x = x.chunk; 

} 

upper("chimpanzees like cigars") 

我猜我需要的塊之後到再次分裂每個塊第一個字符和其餘字符,在第一個字符上使用.toUpperCase(),將其與剩餘的字符一起備份,然後再次將塊加入到字符串中?

有沒有更簡單的方法來做到這一點?

+0

,因爲我只是想利用每個單詞的第一個字母,而不是整個字 –

+0

@rocket得到它,遺憾錯過了 – Deep

回答

1

map功能是完美的。

w[0].toUpperCase():使用此大寫每個單詞的第一個字母

w.slice(1):從第二個字符返回字符串上

邊緣情況

如果用戶沒有輸入字符串,map函數將不起作用,並會引發錯誤。這可以通過檢查用戶是否實際輸入了內容來防範。

var userInput = prompt("Enter a string"); 
 

 
var capitalizedString = userInput == "" ? "Invalid String" : 
 
userInput.split(/\s+/).map(w => w[0].toUpperCase() + w.slice(1)).join(' '); 
 

 
console.log(capitalizedString);

+0

嘗試輸入以下字符串:「我愛美國」。改變字符串的其餘部分是不明智的。你爲什麼假設在第一個字母之後小寫所有字母都可以?你應該刪除'.toLowerCase()'部分。 – connexo

+0

謝謝,這是使用ES6的權利? –

+0

你的代碼示例中的按鈕是什麼? – connexo

0

你可能想嘗試一個正則表達式的方法:

function upperCaseFirst(value) { 
    var regex = /(\b[a-z](?!\s))/g; 
    return value ? value.replace(regex, function (v) { 
     return v.toUpperCase(); 
    }) : ''; 
} 

這會搶在句子每個單詞的第一個字母大寫,但如果你只是想句子的第一個字母,你可以在正則表達式聲明結尾刪除g修飾符。

+0

不錯,很高興看到一個非ES6的方法 –

2

我想出了配備一個可用於單個字以及用於字的陣列的溶液。它還將確保所有其他字母都是小寫字母以保證測量良好。我也使用Airbnb風格指南。我希望這有幫助!

const mixedArr = ['foo', 'bAr', 'Bas', 'toTESmaGoaTs']; 
 
const word = 'taMpa'; 
 

 
function capitalizeOne(str) { 
 
    return str.charAt(0).toUpperCase().concat(str.slice(1).toLowerCase()); 
 
} 
 

 

 
function capitalizeMany(args) { 
 
    return args.map(e => { 
 
    return e.charAt(0).toUpperCase().concat(e.slice(1).toLowerCase()); 
 
    }); 
 
}; 
 

 
const cappedSingle = capitalizeOne(word); 
 
const cappedMany = capitalizeMany(mixedArr); 
 

 
console.log(cappedSingle); 
 
console.log(cappedMany);

1

您可以採用如下方案不使用正則表達式。

function capitalize(str=''){ 
    return str.trim().split('') 
    .map((char,i) => i === 0 ? char.toUpperCase() : char) 
    .reduce((final,char)=> final += char, '') 
    } 

capitalize(' hello')      // Hello