将烤肉串案例转换为camelCase-Javascript
假设我有一个函数,可以将烤肉串盒转换为骆驼盒:将烤肉串案例转换为camelCase-Javascript,javascript,arrays,string,camelcasing,Javascript,Arrays,String,Camelcasing,假设我有一个函数,可以将烤肉串盒转换为骆驼盒: camelize("my-kebab-string") == 'myKebabString'; 我快到了,但我的代码也输出了大写的第一个字母: function camelize(str){ let arr = str.split('-'); let capital = arr.map(item=> item.charAt(0).toUpperCase() + item.slice(1).toLowerCase()); let
camelize("my-kebab-string") == 'myKebabString';
我快到了,但我的代码也输出了大写的第一个字母:
function camelize(str){
let arr = str.split('-');
let capital = arr.map(item=> item.charAt(0).toUpperCase() + item.slice(1).toLowerCase());
let capitalString = capital.join("");
console.log(capitalString);
}
camelize("my-kebab-string");
第一种方法是将
capital
数组的第一个条目转换为小写,如下所示:
capital[0] = capital[0].toLowerCase();
我认为更有效的另一种方法是将另一个参数传递给map
回调,即索引。请进一步阅读以下内容:
因此,如果(索引>0)
,则只转换为大写。
像这样:
let capital = arr.map((item, index) => index ? item.charAt(0).toUpperCase() + item.slice(1).toLowerCase() : item);
为了保留您现有的代码,我刚刚添加了一个索引检查,如果项为0(falsy),它将返回item
,而不是转换的项,因为问题在于您也将第一个项置于上框,而您不应该这样做
简而言之,内联表达式变成:(项,索引)=>index?item.charAt(0).toUpperCase()+item.slice(1).toLowerCase():item
,因为:
- 如果索引不是falsy(因此,如果上下文中的索引大于0),则返回大写字符串
- 否则,将返回当前项
当然,这可能更简洁,可能是单行代码,但我希望尽可能靠近您的代码,以便您能够理解错误:
函数camelize(str){
设arr=str.split('-');
让大写字母=arr.map((item,index)=>index?item.charAt(0.toUpperCase()+item.slice(1.toLowerCase():item.toLowerCase());
//^--在这里换车。
让capitalString=capital.join(“”);
console.log(capitalString);
}
camelize(“我的烤肉串”)代码>您也可以尝试regex
camelize = s => s.replace(/-./g, x=>x.toUpperCase()[1])
只查找后跟任何字符的连字符,并将其大写,并用大写字符替换连字符+字符。对于用户:
arr.map((item,index))=>if(index>0){…}else{…})我知道我可以在这种情况下使用index属性,但不知道目前如何使用。多谢各位@RobertHovhannisyan嗯,指数只是可能的解决方案之一。出于性能原因,您可能希望检查链接主题,这可以通过单个正则表达式而不是映射来轻松完成:).Genius,但我会选择x=>x[1]。toUpperCase()
_.camelCase('my-kebab-string') => 'myKebabString'