【问题标题】:Invalid left-hand side in assignment expression赋值表达式中的左侧无效
【发布时间】:2018-10-08 18:07:15
【问题描述】:

这里的新人正在处理一个玩具问题,构建一个将字符串转换为驼峰式的函数,只要有破折号或下划线。除了函数的倒数第二行之外,我几乎已经解决了所有问题,我试图在返回字符串之前将每个索引处的字符(从我的索引数组)更改为大写。我得到的错误是左侧的错误分配,但我不知道为什么。我已经控制台记录了任务的双方,他们似乎在做我想做的事,但任务本身没有工作。感谢您的帮助!

代码如下:

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

【问题讨论】:

标签: javascript variable-assignment


【解决方案1】:

问题在于在左侧使用 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】:

    啊,谢谢你们为我指明了正确的方向。我没有将它连接回字符串,而是利用它已经是一个数组,然后首先循环遍历它。

    此代码有效...

    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】:

      要通过迭代字符来采取方法,您可以为以下大写字母使用标志。

      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】:

        虽然听起来很奇怪,但修复此错误的方法是添加 ;分号在出现Parsing error: Invalid left-hand side in assignment expression 的行尾。 More context here.

        【讨论】:

          猜你喜欢
          • 2016-11-24
          • 1970-01-01
          • 1970-01-01
          • 2016-06-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-22
          • 2017-04-26
          相关资源
          最近更新 更多