首页 > 解决方案 > 为什么带有条件的 for 循环不会一直迭代到数组的末尾?

问题描述

我正在编写一个函数来更改字符串中的字母(为驼峰式),并且破折号和下划线用作单词结尾的标记。我想知道为什么我的 for 循环在到达数组末尾之前就停止了,特别是因为没有使用条件代码。

我试过控制台记录我的 tmp 数组,它有我想要的('_'或'-')。但是在条件之后代码似乎搞砸了,所以我认为它与此有关。

for (let letter of arr) {
  arr.pop(letter)
  if (letter === '-' || letter === '_') {
    let tmp = []
    tmp.push(letter)
    console.log(tmp)
  } else {
    camelArr.push(letter)
    console.log(camelArr)
  }
}

标签: javascriptarraysloopsif-statement

解决方案


就像指出的那样,您在循环时修改了数组。

使用 .camelCase 函数可能有意义Array.reduce

例如。

const camelCase = str =>
  [...str].reduce((a, v) => {
      if (['_', '-'].includes(v)) a.firstLet = true;
      else {
        a.str += a.firstLet ? v.toUpperCase() : v.toLowerCase()
        a.firstLet = false;
      }
      return a;
    }, {str: '', firstLet: false}).str;
  
console.log(camelCase('this_is-a-Test'));
console.log(camelCase('one-two-three-four'));


推荐阅读