我正在尝试Javascript挑战,其指示是:

 Complete the method/function so that it converts dash/underscore delimited
 words into camel casing. The first word within the output should be
 capitalized only if the original word was capitalized.

Examples:
toCamelCase("the-stealth-warrior")
// returns "theStealthWarrior"

toCamelCase("The_Stealth_Warrior")
// returns "TheStealthWarrior"


我的解决方案是:

function toCamelCase(str) {
  console.log(str);
  var camel = str.replace(/(?:^\w|[A-Z]|-\w|_\w)/g, function(letter, index) {
    return index === 0 && letter === letter.toLowercase  ?
  letter.toLowercase : letter.toUpperCase();
  }).replace(/(-|_)/g, "");
  console.log(camel);
  return camel;
}


在测试案例中使用我的代码时的输出是:

toCamelCase('the_stealth_warrior') did not return correct value -
Expected: theStealthWarrior, instead got: TheStealthWarrior


任何想法哪里出问题了?我觉得我在三元运算符中的条件应该返回小写的t。

最佳答案

这里的这段代码引起您的问题:

function(letter, index) {
    return index === 0 && letter === letter.toLowercase  ?
        letter.toLowercase : letter.toUpperCase();
}


您可能打算使用toLowerCase(),但是相反,您提供了对letter不存在的属性的引用。由于toLowercase不存在,它将返回undefined,这将导致您的条件始终返回false。

将行更改为:

function(letter, index) {
    return index === 0 && letter === letter.toLowerCase()  ?
        letter.toLowerCase() : letter.toUpperCase();
}

09-17 09:41