Неверная левая часть в выражении присваивания - PullRequest
0 голосов
/ 27 апреля 2018

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

Вот код:

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;
}

Ответы [ 3 ]

0 голосов
/ 28 апреля 2018

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

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'));
0 голосов
/ 28 апреля 2018

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

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

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;
}
0 голосов
/ 27 апреля 2018

Проблема с использованием 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('');
}
...