【问题标题】:Separate camelCase string单独的驼峰式字符串
【发布时间】:2021-05-13 21:20:41
【问题描述】:

我的函数应该将一个驼峰大小写的字符串(例如“camelCase”转换为“camel Case”)。我的逻辑基本上是我将字符串拆分为一个数组,识别大写字符,然后在大写字符之前拼接一个空格字符。返回一个连接的数组。我可以想出一个不同的解决方案,但我更好奇为什么我的函数没有返回任何东西。

我的功能:

function solution(str) {
  let splitStr = str.split("");
  for(let i=0; i<splitStr.length; i++){
   if(splitStr[i]===splitStr[i].toUpperCase()){
     splitStr.splice(i, 0, " ");
   }
  }
  return splitStr.join("");
}

如果这引发错误,我会理解,但它不会返回任何内容。不是“未定义”或“空”,什么都没有。所以我并不是在寻找解决这个挑战的方法,因为我很好奇为什么这个函数什么也没吐出来。任何帮助表示赞赏!

【问题讨论】:

  • 也许您想检查您的控制台并尝试获取错误消息,至少可以帮助您了解问题所在。你的功能似乎还可以。尝试注释掉 for 循环,看看它是否返回任何内容
  • 尝试使用正则表达式。check this out
  • 由于" " === " ".toUpperCase() 为真,因此进行了无限循环。在 for 循环中使用 splice() 不是一个好主意。如果这样做不与索引冲突,最好向后工作

标签: javascript function array-splice


【解决方案1】:

首先,我推荐使用正则表达式。

由于您要求对问题进行解释,因此当插入空格并在后续循环中进行比较时,您创建了一个无限循环。引擎陷入无限循环;因此没有输出。根据经验,您应该避免遍历可变结构并对其进行修改。

这是基于您的代码的有效解决方案:

function solution(str) {
  const splitStr = str.split("");
  let result = [];
  for(let i=0; i<splitStr.length; i++){
   if(splitStr[i] === splitStr[i].toUpperCase()){
     result.splice(i, 0, ` ${splitStr[i]}`);
     continue;
   }
   result.push(splitStr[i]);
  }
  return result.join("");
}

【讨论】:

    【解决方案2】:

    这是一个解决方案,你的代码进入了一个无限循环,所以你当然不会得到回报。

    function solution(str) {
        let splitStr = str.split("");
        for (let i = 0; i < splitStr.length - 1; i++) {
            if (splitStr[i] === splitStr[i].toUpperCase()) {
                splitStr.splice(i, 0, " ");
                i++;
            }
        }
        return splitStr.join("");
    }
    
    console.log(solution('raRaRambolaRombala'));
    

    Regex 会是一种“更好”的方式来做到这一点,但你会有更多的开销。

    【讨论】:

      猜你喜欢
      • 2015-05-11
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2016-04-08
      • 1970-01-01
      相关资源
      最近更新 更多