Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将烤肉串案例转换为camelCase-Javascript_Javascript_Arrays_String_Camelcasing - Fatal编程技术网

将烤肉串案例转换为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'