2017-01-19 101 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