![](/img/trans.png)
[英]Can someone tell me what's wrong with my dropdown menu javascript code
[英]JavaScript: Can someone tell me what's going wrong with my code?
我一直在做JavaScript练习,因为我已经做太久了。 他们大多数都在工作,但我一直对此视而不见。
我需要将所有小写字母都设为大写,反之亦然。 我检查了解决方案,它很有帮助,但是我确定我也可以使自己的代码(与答案有很大不同)起作用。
感谢您提供的所有帮助。
function swapCase (str) {
var sen = str;
for ( var i = 0; i < sen.length; i++) {
if (sen.charAt(i) === sen.charAt(i).toLowerCase()) {
sen.charAt(i).toUpperCase();
} else if (sen.charAt(i) === sen.charAt(i).toUpperCase()) {
sen.charAt(i).toLowerCase();
}
} return sen;
}
console.log(swapCase("UPlowUPlow"));
附:我知道这不是最干净的代码,但是我已经花了一段时间了。 :)
toUpperCase
和toLowerCase
返回修改后的字符串,但它们没有就位修改。 因此,您必须将该值放入要处理的字符串中,例如:
sen = sen.substring(0, i - 1) + sen.charAt(i).toUpperCase() + sen.substring(i + 1);
鉴于这很尴尬,您最好将字符串转换为单字符字符串数组,然后处理该数组,然后再次组合。
您可以像这样将字符串转换为单字符串数组:
theArray = theString.split("");
...然后循环处理或通过Array#map
处理每个条目:
theArray[i] = theArray[i].toUpperCase();
...然后在完成后将其转换回:
theString = theArray.join("");
这是使用Array#map
的示例:
function swapCase (str) { var theArray = str.split(""); theArray = theArray.map(function(ch) { var lower = ch.toLowerCase(); return ch === lower ? ch.toUpperCase() : lower; }); return theArray.join(""); } var str = "UPlowUPlow"; snippet.log("Before: " + str); str = swapCase(str); snippet.log("After: " + str);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
这是简洁的版本:
function swapCase (str) { return str.split("").map(function(ch) { var lower = ch.toLowerCase(); return ch === lower ? ch.toUpperCase() : lower; }).join(""); } var str = "UPlowUPlow"; snippet.log("Before: " + str); str = swapCase(str); snippet.log("After: " + str);
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 --> <script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
sen.charAt(i).toUpperCase()
不会更改该位置的字符。 您需要手动更新。
function swapCase (str) {
var sen = str;
var updatedStr = "";
for ( var i = 0; i < sen.length; i++) {
if (sen.charAt(i) === sen.charAt(i).toLowerCase()) {
updatedStr += sen.charAt(i).toUpperCase();
} else if (sen.charAt(i) === sen.charAt(i).toUpperCase()) {
updatedStr += sen.charAt(i).toLowerCase();
}
}
return updatedStr;
}
作为附带说明,请记住字符串是不可变的, 引用 :
在JavaScript中,字符串是不可变的对象,这意味着它们中的字符可能不会更改,并且对字符串的任何操作实际上都会创建新的字符串。 字符串是通过引用而不是值来分配的。 通常,当通过引用分配对象时,通过一个引用对该对象所做的更改将通过对该对象的所有其他引用可见。 但是,由于无法更改字符串,因此您可以对一个字符串对象有多个引用,而不必担心字符串值会在您不知道的情况下发生变化
谢谢大家的出色回答!
多亏了你们,我花了很长时间才在几秒钟内“解决”了这个问题。
我很乐意提高您的答案,而不是写一封感谢信,但我尚未被允许这样做。 因此,我将以这种方式进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.