我一直在做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"));
P.s:我知道它不是最干净的代码,但我已经有一段时间了。 :)
答案 0 :(得分:4)
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);
&#13;
<!-- 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>
&#13;
这里是简洁的版本:
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);
&#13;
<!-- 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>
&#13;
答案 1 :(得分:1)
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;
}
答案 2 :(得分:1)
作为旁注,请记住字符串是不可变的,quoting:
在JavaScript中,字符串是不可变对象,这意味着 其中的字符可能无法更改,也不能进行任何操作 字符串实际上创建新字符串字符串由。分配 参考,而不是价值。通常,当分配对象时 引用,通过一个引用对对象进行的更改将是 通过对象的所有其他引用可见。因为字符串 但是,您可以对a进行多次引用 字符串对象并不担心字符串值会在没有的情况下发生变化 你知道吗
答案 3 :(得分:1)
感谢人们的出色答案!
感谢你们,我在很长一段时间内“解决”了这个问题。
我很乐意提出你的答案,而不是写一封感谢信,但我还没有被允许这样做。所以,我会这样做。