是什么导致拼接方法中的无限循环?

时间:2018-10-03 02:21:58

标签: javascript arrays splice

我编写了一个在大写字母前插入'-'的代码

  render() {
    const project = () => {
      switch(this.projectName) {

        case "one":   return <ComponentA />;
        case "two":   return <ComponentB />;
        case "three": return <ComponentC />;
        case "four":  return <ComponentD />;

        default:      return <h1>No project match</h1>
      }
    }

    return (
      <div>{ project() }</div>
    )
  }

但是有一件事让我非常好奇。在拼接部分,当我将数字从1更改为0

const caseSwitch = (str) => {
  let strArr = [...str];
  for(let i = 0; i < strArr.length; i++) {
    if(strArr[i] === strArr[i].toUpperCase()) {
     strArr.splice(i, 1, '-' + strArr[i]);
    } 
  } return strArr.join('')
}

caseSwitch('camelCaseSnakeCase'); // 'camel-Case-Snake-Case'

警告标志“ RangeError:潜在的无限循环”。弹出。

但是当我使用0时,在另一个拼接方法中,在两个偶数之间插入“-”:

strArr.splice(i, 0, '-' + strArr[i]);

它工作正常。但是不知道为什么两个相同的方法在两个代码中的作用不同。

1 个答案:

答案 0 :(得分:0)

容易得多,匹配所有大写字母并将其替换为带有-前缀的自身。

const caseSwitch = (str) => str.replace(/([A-Z])/g, "-$1");

console.log(caseSwitch('camelCaseSnakeCase'));