【问题标题】:convert uppercase letters to lower case将大写字母转换为小写字母
【发布时间】:2018-05-22 19:37:50
【问题描述】:

我知道有很多关于如何将字符串中的字符全部转换为小写的讨论。我的问题是为什么我在下面的实现失败了。

代码:

let str = 'aAaA';

const makeLowerCase = (string) => {
  for ( var i = 0; i < string.length; i++ ) {
    let lower = string[i].toLowerCase(); 
    if (string[i] !== lower ) {
      string[i] = lower;
    } 
  }
}

console.log('before', str);
makeLowerCase(str);
console.log('after', str);

控制台输出:

before aAaA
after aAaA

即使对于索引 1 和 3,if 语句测试应该通过,但该块中的代码显然没有运行或正在运行但没有预期的结果。

谢谢大家。

【问题讨论】:

  • Javascript 中的字符串是不可变的,一旦设置就无法更改。但是为什么要转换每个字符而不是整个字符串呢? str.toLowerCase
  • 字符串是不可变的。您需要对整个字符串进行评估。

标签: javascript algorithm iteration


【解决方案1】:

JavaScript 字符串是不可变的。所以你不能使用C 编程风格改变字符串。而是使用下面的代码

let str = 'aAaA';

const makeLowerCase = (string) => {
  for ( var i = 0; i < string.length; i++ ) {
    let lower = string[i].toLowerCase(); 
    if (string[i] !== lower ) {
      string = string.substring(0,i)+lower+string.substring(i+1);
    } 
  }
  return string;
}

console.log('before', str);
str = makeLowerCase(str);
console.log('after', str);

您也可以简单地对整个字符串调用toLowerCase() 方法,除非您有任何理由运行循环。如下:

let str = 'aAaA';
str = str.toLowerCase();
console.log(str);

【讨论】:

    【解决方案2】:

    关闭for语句并添加以下内容

    Return string
    

    运行

    Console.log(makeLowerCase(...))
    

    const str = makeLowerCase(...); console.log(str)

    【讨论】: