JavaScript - 将字符串中的所有字母转换为大写或小写

4

我是Javascript的初学者。
我尝试编写一个将字符串转换为大写或小写的函数。 但是我困惑于它为什么不能产生预期的输出结果。 以下是我的函数目的和代码。谢谢!

  1. 函数目的:

当字符串中的字母为大写时,它将转换为小写。 当字符串中的字母为小写时,它将转换为大写。 例如:"Peter"将会被转换为"pETER"

  1. 问题:

我不明白为什么我的代码最终得到了"Peter"而不是"pETER"。

function swap(str) {
  var name = ''
  for (i = 0; i <= str.length - 1; i++) {
    if (str[i] >= 'a' && str[i] <= 'z') {
      str[i].toUpperCase()
    } else {
      str[i].toLowerCase()
    }
    name += str[i]
  }
  return name
}

console.log(swap('Peter'))

我不确定问题是否在这一行。

if(str[i] >= 'a' && str[i] <= 'z'){
  str[i].toUpperCase()
}

有人能帮助我吗,谢谢!


2
在JS中,字符串是不可变的,因此执行str[i].toUpperCase()不会使您字符串中的第i个字母大写,而是会返回大写版本,您可以使用它来构建一个新的字符串。 - Nick Parsons
这个回答解决了你的问题吗?在 JavaScript 中转换大小写 - Harmandeep Singh Kalsi
1
@NickParsons 非常感谢!我知道我的问题在哪了。 - wibbly
1
@HarmandeepSinghKalsi 是的!! 它对我有帮助,抱歉我之前没有找到这个有用的答案。 - wibbly
5个回答

2
使用reduce函数来累加新字符串,并使用小写/大写JS函数来检查字母并进行转换。

const swap = (str) => str.split('').reduce((acc, char) =>
  acc += char === char.toLowerCase() ? char.toUpperCase() :
  char.toLowerCase(), '')

console.log(swap('Peter'))


1
我认为你的问题在于认为 str[i].toUpperCase()str[i].toLowerCase() 会改变 str[i] 的值,但实际上并不会。这些函数会将字符值更改为大写或小写,并返回函数调用的结果,但原始变量(str[i])将保持其值。 尝试使用此版本:

function swap(str) {
  var name = ''
  var string;
  for (i = 0; i <= str.length - 1; i++) {
    string = str[i];  
    if (str[i] == string.toUpperCase()) {
      name += string.toLowerCase();
    } else {
      name += string.toUpperCase();
    }
  }
  return name;
}

console.log(swap('PeTeR'));


谢谢!你是对的!我以为会改变原来的str[i]值,但我忽略了在JS中字符串是不可变的。 - wibbly

0
function name(str){
  let newArr = str.split('')
  let output = [];
  for(let x of newArr){
    output.push(x.toUpperCase());
  }
  return output.join('');
}

name('hello')

0

这个有效:

function swap(str) {
  var name = ''
  for (i = 0; i <= str.length - 1; i++) {
    if (str[i] >= 'a' && str[i] <= 'z') {
      name += str[i].toUpperCase()
    } else {
      name += str[i].toLowerCase()
    }
  }
  return name
}

console.log(swap('Peter'))


0

我已经修改了你的代码,现在应该可以工作了。

function swap(str) {
      var name = ''
      var lowers = "abcdefghijklmnopqrstuvwxyz";
      for (i = 0; i <= str.length - 1; i++) {
        if (lowers.includes(str[i])) {
          name +=str[i].toUpperCase()
        } else {
          name +=str[i].toLowerCase()
        }
      }
      return console.log(name);
    }
swap("Peter");


谢谢!我知道问题出在哪里了。 - wibbly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,