我正在尝试编写一个函数,例如将
list-style-image
转换为 listStyleImage
。
我想出了一个函数,但它似乎不起作用。有人能指出我这里的问题吗?
var myStr = "list-style-image";
function camelize(str){
var newStr = "";
var newArr = [];
if(str.indexOf("-") != -1){
newArr = str.split("-");
for(var i = 1 ; i < newArr.length ; i++){
newArr[i].charAt(0).toUpperCase();
}
newStr = newArr.join("");
}
return newStr;
}
console.log(camelize(myStr));
您必须实际重新分配数组元素:
for(var i = 1 ; i < newArr.length ; i++){
newArr[i] = newArr[i].charAt(0).toUpperCase();
}
“toUpperCase()”函数返回新字符串,但不修改原始字符串。
您可能需要首先检查以确保
newArr[i]
是空字符串,以防您得到带有两个连续破折号的输入字符串。
编辑 - 指出SO贡献者@lonesomeday正确地指出你还需要将每个字符串的其余部分粘回去:
newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1);
const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
days.map( a => a.charAt(0).toUpperCase() + a.substr(1) );
这是我使用 ES6 的解决方案。这是一个示例,我将一周中的几天存储在数组中,并使用
for... of
循环将它们大写。
const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
for (let day of days) {
day = day.charAt(0).toUpperCase() + day.substr(1);
console.log(day);
}
这里是文档的链接:for...of 循环文档
在
for
循环中,您需要替换 newArr[i]
的值,而不是简单地评估它:
for(var i = 1 ; i < newArr.length ; i++){
newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1);
}
从 JavaScript ES6 开始,您可以用一行实现字符串数组的“驼峰化”:
let newArrCamel= newArr.map(item=> item.charAt(0).toUpperCase() + item.substr(1).toLowerCase())
这是我使用 slice() 方法的解决方案。
const names = ["alice", "bob", "charlie", "danielle"]
const capitalized = names.map((name) => {
return name[0].toUpperCase() + name.slice(1)
})
console.log(大写)
// 预期输出: // [“爱丽丝”、“鲍勃”、“查理”、“丹妮尔”]
您不需要数组来将连字符和小写字母替换为大写-
function camelCase(s){
var rx= /\-([a-z])/g;
if(s=== s.toUpperCase()) s= s.toLowerCase();
return s.replace(rx, function(a, b){
return b.toUpperCase();
});
}
camelCase("list-style-image")
/* returned value: (String)
listStyleImage
*/
您需要将大写字母存储回数组中。请参考下面修改后的循环,
for(var i = 1 ; i < newArr.length ; i++)
{
newArr[i] = newArr[i].charAt(0).toUpperCase() + newArr[i].substr(1,newArr[i].length-1);
}
有点长,但基本上可以通过数组完成工作:
function titleCase(str) {
var arr = [];
var arr2 = [];
var strLower = "";
var strLower2 = "";
var i;
arr = str.split(' ');
for (i=0; i < arr.length; i++) {
arr[i] = arr[i].toLowerCase();
strLower = arr[i];
arr2 = strLower.split('');
arr2[0] = arr2[0].toUpperCase();
strLower2 = arr2.join('');
arr[i] = strLower2;
}
str = arr.join(' ');
return str;
}
titleCase("I'm a little tea pot");
substr()
方法返回起始索引与其后的多个字符之间的字符串部分。来源:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr
const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
for (let day of days) {
day = day.substr(0, 1).toUpperCase() + day.substr(1);
console.log(day);
}
这是另一个解决方案,尽管我玩得太晚了。
const days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
let capitalize = days.map(day => day.charAt(0).toUpperCase() + day.slice(1).toLowerCase());
console.log(capitalize);
让我们看看下面的代码。
['sun','mon'].reduce((a,e)=> { a.push(e.charAt(0).toUpperCase()+e.substr(1)); return a; },[]);
输出: [“周日”,“周一”]
我最好的方法是:
function camelCase(arr) {
let calc = arr.map(e => e.charAt(0).toUpperCase() + e.slice(1)).join('')
console.log(calc)
return calc;
}
// Test
camelCase(['Test', 'Case'])
function titleCase(str){ // my codelooks like Jmorazano but i only use 4 var.
var array1 = [];
var array2 = [];
var array3 = "";
var i;
array1 = str.split(" ");
for (i=0; i < array1.length; i++) {
array1[i]= array1[i].toLowerCase();
array2=array1[i].split("");
array2[0]=array2[0].toUpperCase();
array3 = array2.join("");
array1[i] = array3;}
str = array1.join(' ');
return str;}
titleCase("I AM WhO i aM"); //Output:I Am Who I Am
// my 1st post.
这就是我的做法。
function capitalizeFirst(arr) {
if (arr.length === 1) {
return [arr[0].toUpperCase()];
}
let newArr = [];
for (let val of arr) {
let value = val.split("");
let newVal = [value[0].toUpperCase(), ...value.slice(1)];
newArr.push(newVal.join(""));
}
return newArr;
}
请检查下面的代码
var months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'november', 'decembar'];
for(let month of months){
month = month.charAt(0).toUpperCase() + month.substr(1);
console.log(month);
}
const values = ["justin", "shawn", "drake", "taylor"];
const capitalValue = values.map((value) => {
return value[0].toUpperCase() + value.substring(1);
});
console.log(capitalValue);