【问题标题】:Adding element with the splice method使用拼接方法添加元素
【发布时间】:2019-11-24 13:58:56
【问题描述】:

我正在尝试使用 javascript 拼接方法在数组中的每个大写字母之前添加一个“-”,但它不起作用。我不知道我做错了什么。下面是我的代码。

function spinalCase(str) {
  let strArr = [];
  for(let i = 0; i < str.length; i++){
    strArr.push(str[i]);
  }
  for(let i = 0; i < strArr.length; i++){
    if(strArr[i] !== strArr[i].toLowerCase()){
      strArr.splice(strArr.indexOf(strArr[i]),0, "-");
    }
  } 
console.log(strArr);
}

spinalCase('thisIsSpinalTap');

【问题讨论】:

    标签: javascript arrays string add splice


    【解决方案1】:

    当您使用 splice 添加新元素时,您将增加数组的 length 并且循环永远无法完成。如果您使用从数组末尾到开头的循环,则可以避免此问题。

    function spinalCase(str) {
      let strArr = [];
      for (let i = 0; i < str.length; i++) {
        strArr.push(str[i]);
      }
    
      // Work the loop from the end to the beginning
      for (let i = strArr.length - 1; i >= 0 ; i--) {
        if (strArr[i] !== strArr[i].toLowerCase()) {
          strArr.splice(strArr.indexOf(strArr[i]), 0, "-");
        }
      }
      console.log(strArr.join(''));
    }
    
    spinalCase('thisIsSpinalTap');

    【讨论】:

      【解决方案2】:

      我知道你想使用 splice,但这里有一个小的正则表达式解决方案;以防万一。

      function spinalCase(str) {
       return str.replace(/[A-Z]/g, "-$&").toLowerCase();
      }
      
      console.log(spinalCase("thisIsSpinalTap"))
      // this-is-spinal-tap

      【讨论】:

        【解决方案3】:

        你改变了你的数组:

        strArr.splice(strArr.indexOf(strArr[i]),0, "-");
        

        所以strArr.length 不是循环for(let i = 0; i &lt; strArr.length; i++) 的常量

        【讨论】:

          猜你喜欢
          • 2021-07-28
          • 2021-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-19
          • 2011-01-13
          • 2011-02-15
          • 1970-01-01
          相关资源
          最近更新 更多