【问题标题】:convert capital letters into small and small letters into capital将大写字母转换为小写字母,将小写字母转换为大写字母
【发布时间】:2018-07-18 09:44:41
【问题描述】:
var str = "HellO WoRld"
var myArr = str.split(" ");
for(i=0;i<myArr.length;i++)
{
    myArr2 =myArr[i].split("");
    // console.log(myArr2);
        for(j=0;j<myArr2.length;j++)
        {
         if(myArr2[j].charCodeAt(j) >= 65 && myArr2[j].charCodeAt(j) <= 90  )
         {
            document.write(myArr2[j].toLowerCase());
         }
         else  if(myArr2[j].charCodeAt(j) >= 97 && myArr2[j].charCodeAt(j) <= 122  )
         {
            document.write(myArr2[j].toUpperCase());
         }
    }
}

所以,伙计们,我一直在尝试使用 charCodeAt() 将我的单词中的字母从大写字母更改为小写字母,反之亦然,你们能告诉我我的代码有什么问题,或者建议一个替代代码,但只使用 charCodeAt()。 在我的代码中,输入是 Hello WoRld,输出应该是 hELLo wOrLD,但我得到的输出是 hw。

【问题讨论】:

  • 试试str.split("")不带空格的分割
  • Swap Case on javascript的可能重复
  • 谢谢,这很简单,但即使我得到的输出不是 100% 完美,因为我的输入是“Hello World”,但我得到的输出是“hELLowOrLD”,因为你可以不知道你好和世界之间的空间任何建议

标签: javascript


【解决方案1】:

var str = "HellO WoRld"
var myArr = str.split("");
for(i=0;i<myArr.length;i++)
{
    myArr2 =myArr[i].split("");
    // console.log(myArr2);
        for(j=0;j<myArr2.length;j++)
        {
         if(myArr2[j].charCodeAt(j) >= 65 && myArr2[j].charCodeAt(j) <= 90  )
         {
            console.log(myArr2[j].toLowerCase());
         }
         else  if(myArr2[j].charCodeAt(j) >= 97 && myArr2[j].charCodeAt(j) <= 122  )
         {
            console.log(myArr2[j].toUpperCase());
         }
    }
}

你的问题是str.split(" "),删除多余的空间和没有空间的分割应该可以正常工作var myArr = str.split("")@line2

【讨论】:

  • 谢谢,这很简单,但即使我得到的输出不是 100% 完美,因为我的输入是“Hello World”,但我得到的输出是“hELLowOrLD”,因为你可以不知道你好和世界之间的空间任何建议
  • @JustaGamer:你是什么意思?我已经指出了问题,您只需单击“运行代码 sn-p”即可查看结果
  • 为什么只做别人的作业而不是帮助他们自己解决?
  • @DaveNewton:至少对我来说,SO 是您在遇到困难时寻求帮助的地方,无论是工作还是家庭作业,都无所谓。但最重要的是你已经尝试过并且有过尝试。 OP 发布的代码对我来说确实看起来像是一个尝试的解决方案,只是无法达到他的目标
  • 因此,对 OP 出错的地方进行简单的解释,以及相关文档的链接和摘要就足够了——这也为 op 提供了弄清楚如何解决问题的方法. YMMV,但我宁愿教初学者如何学习而不是交给他们代码。
【解决方案2】:

我认为您在滥用charCodeAt 函数。此函数已将字符位置作为输入,但您指定了两次该信息,例如

myArr2[j].charCodeAt(j)

试试这个版本:

var str = "HellO WoRld"
var myArr = str.split(" ");
var out = "";

for (i=0; i < myArr.length; i++) {
    var word = myArr[i];
    var output = "";
    console.log(word);
    for (j=0; j < word.length; j++) {
        if (word.charCodeAt(j) >= 65 && word.charCodeAt(j) <= 90) {
            output += String.fromCharCode(word.charCodeAt(j) + 32);
        }
        else if (word.charCodeAt(j) >= 97 && word.charCodeAt(j) <= 122) {
            output += String.fromCharCode(word.charCodeAt(j) - 32);
        }
    }
    if (out !== "") {
        out += " ";
    }
    out += output;
    console.log(output);
}

console.log("final output: " + out);

如果您需要将此输出写入 DOM,我建议您先在 JavaScript 代码中构建字符串,然后进行一次 DOM 更新,而不是一次更新一个字符。

【讨论】:

  • @JustaGamer 我已更新为您提供了一个选项,用于构建您想要的确切最终输出,带有空格。
  • 谢天谢地,有人在这里为他做功课。我假设您会指示 OP 自己解决问题,而不是仅仅将答案交给他们 :(
  • @DaveNewton 信不信由你,当我回答时,我从未想到这是一个家庭作业转储。但是,既然你提到它,是的,这可能是家庭作业。
  • @DaveNewton 好吧,这根本不是家庭作业,我一直在从 youtube 和其他在线课程中学习 javascript,所以不得不问自己出了什么问题,要么是在尝试相同的 prg 几个小时一起或只是弄清楚并继续下一步
  • @JustaGamer 这与家庭作业有什么不同?无论如何,这不是我的意思。