Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Недопустимая левая часть в выражении присваивания

Автор вопроса: mateotherockОтветов: 4

Новый человек здесь работает над игрушечной проблемой, создавая функцию, которая преобразует строку в верблюжий регистр везде, где есть тире или подчеркивание. У меня почти все отработано, кроме предпоследней строки функции, где я пытаюсь изменить символы в каждом индексе (из моего индексного массива) на верхний регистр, прежде чем возвращать строку. Ошибка, которую я получаю, - это неправильное назначение с левой стороны, но я не уверен, почему. Я зарегистрировал в консоли обе стороны задания, и они, кажется, делают то, что я хочу, но само задание не работает. Спасибо за любую помощь!

Вот код:

function toCamelCase(str){
  var stringArray = str.split('');
  var indexArray = [];
  stringArray.forEach(character => {
    if (character === '-' || character === '_') {
      var index = str.indexOf(character);
      str = str.slice(0, index) + str.slice(index+1)
      indexArray.push(index);
    }
    return character;
  })
  indexArray.forEach(index => {stringArray.splice(index, 1)});
  string = stringArray.join('');
  indexArray.forEach(index => {string.charAt(index) = string.charAt(index).toUpperCase()});
  return string;
}

  • Возможный дубликат Почему вызывает ли chartAt() ошибку "Недопустимая левая сторона в присваивании" в JavaScript? Guilherme Lemmi 28.04.2018

javascriptvariable-assignment

Ответы

Ответ 1 · рейтинг 2 · Guilherme Lemmi

Проблема заключается в использовании string.charAt() слева. Это невозможно, поскольку вы пытаетесь присвоить что-то результату функции в одном и том же вызове. Сохраните значение string.charAt() в промежуточной переменной, и оно должно работать. Проверьте код ниже для рабочего примера, используя немного другой подход:

function toCamelCase(str){
  var stringArray = str.split('');
  var indexArray = [];
  stringArray.forEach(character => {
    if (character === '-' || character === '_') {
      var index = str.indexOf(character);
      str = str.slice(0, index) + str.slice(index+1)
      indexArray.push(index);
    }
    return character;
  });
  indexArray.forEach(index => {stringArray.splice(index, 1)});
  return stringArray.map((char, index) => {
    return indexArray.includes(index) ? char.toUpperCase() : char;
  }).join('');
}

Ответ 2 · рейтинг 1 · mateotherock

Ах, спасибо вам обоим за то, что указали мне правильное направление. Вместо того, чтобы присоединять его обратно к строке, я воспользовался тем, что он уже является массивом, и просто сначала просмотрел его.

Этот код сработал...

function toCamelCase(str){
  var stringArray = str.split('');
  var indexArray = [];
  stringArray.forEach(character => {
    if (character === '-' || character === '_') {
      var index = str.indexOf(character);
      str = str.slice(0, index) + str.slice(index+1)
      indexArray.push(index);
    }
    return character;
  })
  indexArray.forEach(index => {stringArray.splice(index, 1)});
  indexArray.forEach(index => {stringArray[index] = stringArray[index].toUpperCase()});
  var string = stringArray.join('');
  return string;
}

Ответ 3 · рейтинг 1 · Nina Scholz

Для подхода путем повторения символов вы можете использовать флаг для следующей буквы верхнего регистра.

function toCamelCase(str) {
    var upper = false;

    return str
        .split('')
        .map(c => {
            if (c === '-' || c === '_') {
                upper = true;
                return '';
            }
            if (upper) {
                upper = false;
                return c.toUpperCase();
            }
            return c;
        })
        .join('');
}

console.log(toCamelCase('foo----bar_baz'));

Ответ 4 · Lukasz Dynowski

Как бы странно это ни звучало, что исправило эту ошибку, добавив ; точка с запятой в конце строки, где встречается Parsing error: Invalid left-hand side in assignment expression. Дополнительный контекст здесь.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы