当我跑步时,似乎陷入无限循环,但对于我的生活,我无法看出错误。
我正在做的问题是:http://coderbyte.com/CodingArea/GuestEditor.php?ct=Swap%20Case&lan=JavaScript
"使用JavaScript语言,使用函数SwapCase(str)获取str参数并交换每个字符的大小写。例如:如果str是" Hello World"输出应该是hELLO WORLD。让数字和符号保持原样。"
function SwapCase(str) {
// code goes here
// loop through, check case with functions isUpper or isLower
// if isUpper --> .toLowerCase; if isLower --> .toUpperCase
for (var i = 0; i < str.length; i++) {
if (isUpper(str[i]))
str = str.slice(0, i) + str[i].toLowerCase() + str.slice(i);
else if (isLower(str[i]))
str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i);
}
return str;
}
function isLower(char) {
var alphabet = 'abcdefghijklmnopqrstuvwxyz';
for (var j = 0; j < alphabet.length; j++) {
if (char === alphabet[j]) return true;
}
}
function isUpper(char) {
var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for (var k = 0; k < alphabet.length; k++) {
if (char === alphabet[k]) return true;
}
}
答案 0 :(得分:0)
这行代码:
str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i);
“你好”.slice(i)当i = 0时给你“你好”。 因此在每次迭代后str变为h + hello;他+你好。你的字符串不断增加。
一个解决方法是预先存储str.length。
var strLen = str.length;
for (var i = 0; i < strLen; i++) {
这将强制循环运行字符串的原始长度。
或者您可以通过以下方式修复:
str = str.slice(0, i) + str[i].toLowerCase() + str.slice(i + 1);
else if (isLower(str[i]))
str = str.slice(0, i) + str[i].toUpperCase() + str.slice(i + 1);
注意str.slice(i + 1);