題目
把字符串參數(shù)變成像標題一樣,首字母大寫。另外,如果給了一些例外的詞,這些詞如果不是出現(xiàn)在開頭,則全部采用小寫。
Description:
A string is considered to be in title case if each word in the string is either (a) capitalised (that is, only the first >letter of the word is in upper case) or (b) considered to be an exception and put entirely into lower case >unless >it is the first word, which is always capitalised.
Write a function that will convert a string into title case, given an optional list of exceptions (minor words). The >list of minor words will be given as a string with each word separated by a space. Your function should ignore >the case of the minor words string -- it should behave in the same way even if the case of the minor word >string is changed.
Example
titleCase('a clash of KINGS', 'a an the of') // should return: 'A Clash of Kings'
titleCase('THE WIND IN THE WILLOWS', 'The In') // should return: 'The Wind in the Willows'
titleCase('the quick brown fox') // should return: 'The Quick Brown Fox'
我的答案
function titleCase(title, minorWords) {
const lower_title = title.toLowerCase().split(' ');
if (title.length>0) {
let words = title.toLowerCase().split(' ');
console.log(words);
words = words.map(function(x){
x = x.replace(/./, x[0].toUpperCase());
return x;
});
console.log(words);
try {
if (minorWords.length > 0) {
let minor = minorWords.toLowerCase().split(' ');
console.log(minor);
minor.map(function(y){
let sq = lower_title.lastIndexOf(y);
while (sq>0) {
words[sq] = y;
sq = words.lastIndexOf(y, sq - 1);
}
});
}
}
finally {
return words.join(' ');
}
} else {
return title;
}
}
別人的答案
function titleCase(title, minorWords) {
var minorWords = typeof minorWords !== "undefined" ? minorWords.toLowerCase().split(' ') : [];
return title.toLowerCase().split(' ').map(function(v, i) {
if(v != "" && ( (minorWords.indexOf(v) === -1) || i == 0)) {
v = v.split('');
v[0] = v[0].toUpperCase();
v = v.join('');
}
return v;
}).join(' ');
}
我的感想
- 今晚有點亂了,工作事在鬧,做js的題也老是卡住
- 現(xiàn)在已經(jīng)12點半,不想在動腦了,我準備睡了
- 我的代碼卡了最多的是這個部分:
words = words.map(function(x){
x = x.replace(/./, x[0].toUpperCase());
return x;
});
試了好久才試出來,一定要words=words... 一定要x=x... 不然就都丟了,去。哎。晚安。