Почему цикл for с условным условием не выполняет итерацию до конца массива? - PullRequest
0 голосов
/ 23 октября 2019

Я пишу функцию для изменения букв в строке (в camelCase), а черточки и подчеркивания используются в качестве маркеров для конца слова. Я хочу знать, почему мой цикл 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)
  }
}

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Как указано выше, вы изменяете массив в цикле.

Нечто подобное функции 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'));
0 голосов
/ 23 октября 2019

вам, возможно, следует быть более осторожным с arr.pop (letter)

Метод pop () удаляет последний элемент массива: для каждого цикла вы всплываете последний элемент в массиве.

попробуйте удалить значение @ указанный индекс ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...