4

我是Javascript的初学者。
我试图将一个关于隐藏字符串的函数转换为大写或小写。但我很困惑为什么它能得到预期的输出。以下是我的功能目的和代码。谢谢您!

  1. 功能用途:

当字符串中的字母为大写时,它将变为小写。当字符串中的字母为小写时,它将变为大写。例如:“Peter”将转换为“Peter”

  1. 问题:

我不明白为什么我的代码以“Peter”而不是“Peter”结尾

函数交换(str){var名称=“”对于(i=0;i<=str.length-1;i++){if(str[i]>=“a”&&str[i]<=“z”){str[i].toUpperCase()}其他{str[i].to小写()}名称+=字符串[i]}返回名称}console.log(交换('Peter'))

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

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

有人能帮我吗,谢谢!!

4
  • 2
    字符串在JS中是不可变的,因此str[i].toUpperCase()不会使字符串中的第i个字母大写,相反,它将返回大写版本,您可以使用该版本构建新字符串。 评论 2020年8月15日8:48
  • 这回答了你的问题吗?在javascript中转换大小写 评论 2020年8月15日8:48
  • 1
    @尼克弗森非常感谢!我知道我的问题是什么。 评论 2020年8月15日12:05
  • 1
    @HarmandeepSinghKalsi是的!!这对我很有帮助,对不起,我以前没有找到这个有用的答案。 评论 2020年8月15日12:16

5个答案5

重置为默认值
2

我认为你的问题是这样想str[i].toUpperCase()str[i].toLowerCase()将更改字符串[i],但不是。这些函数会将char值更改为大写或小写,并返回函数调用的结果,但原始变量(str[i])将保持其值。

试用此版本:

功能交换(str){var名称=“”var字符串;对于(i=0;i<=str.length-1;i++){字符串=str[i];if(str[i]==string.toUpperCase()){名称+=string.toLowerCase();}其他{name+=字符串.toUpperCase();}}返回名称;}console.log(交换(“PeTeR”));

1
  • 谢谢您!你是对的!我认为它会更改原始的str[I]值,但我忽略了字符串在JS中是不可变的。 评论 2020年8月15日11:58
2

使用reduce累积新字符串,使用小写/大写JS函数检查字母,然后进行转换。

const swap=(str)=>str.split(“”).reduce((acc,char)=>acc+=char===char.toLowerCase()?字符到UpperCase():字符.toLowerCase(),'')console.log(交换('Peter'))

0

这项工作:

功能交换(str){var名称=“”对于(i=0;i<=str.length-1;i++){if(str[i]>=“a”&&str[i]<=“z”){name+=str[i].toUpperCase()}其他{名称+=str[i].toLowerCase()}}返回名称}console.log(交换('Peter'))

0

我已经更改了您的代码,但现在应该可以工作了

功能交换(str){var名称=“”var-lowers=“abcdefghijklmnopqrstuvwxyz”;对于(i=0;i<=str.length-1;i++){if(lowers.includes(str[i])){name+=str[i].toUpperCase()}其他{名称+=str[i].toLowerCase()}}return-console.log(名称);}掉期(“Peter”);

1
  • 谢谢您!我知道问题出在哪里。 评论 2020年8月15日11:59
0
函数名(str){让newArr=str.split(“”)设输出=[];for(让newArr的x){output.push(x.toUpperCase());}返回output.join(“”);}姓名(“hello”)

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.