嗨,我有这个kata问题,我目前正在解决kata的说明,如下所示:
-给出2个字符串参数,显示以下内容的串联:
-第二个字符串的反向,带有大小写倒置;例如Fish-> HSIf
-两个字符串之间的分隔符:@@@
-第一个字符串颠倒并带有大写字母,然后进行镜像;例如水->零售
我的问题是我的输出具有非字母的任何内容的重复,例如,如果我的输入为“ 123”,则返回“ 112233”,请在此处检查我认为有问题的部分代码,我需要查找一种不重复在我的结果上添加非字母的内容的方法。例如,如果我输入以下内容:console.log(mirror(“此目录为”,“给我123个ProBleMS”))。我得到了:smELbORp 332211 Em GNiVIg @@@ SIEdoCSIHttHIS CodE IS。但是我想要这个:smELbORp 321 Em GNiVIg @@@ SIEdoCSIHttHIS CodE IS
for (let i = 0; i < s1.length; i++) {
if (s1[i] == s1[i].toUpperCase()) {
if (s1[i])
y += s1[i].toLowerCase();
}
if (s1[i] == s1[i].toLowerCase()) {
y += s1[i].toUpperCase();
}
}
答案 0 :(得分:0)
我的问题是我的输出具有非字母的任何内容的重复,例如,如果我的输入为“ 123”,则返回“ 112233”
问题在于,当您处理诸如"1"
之类的非字母字符时,它始终等于toUpperCase
和toLowerCase
的结果,因为它们不更改这些字符:
console.log("1" == "1".toUpperCase()); // true
console.log("1" == "1".toLowerCase()); // also true
因此,您的两个if
条件都成立,并且两次附加了字符。
您可能不仅要在第二个else
之前使用if
,而且还要在第三个块中使用字符,因为它原样保留了字符(我无法立即想到一个字符串既不等于自己的toUpperCase
也不等于toLowerCase
,但这并不意味着不存在)。您也不需要嵌套的if
。所以:
if (s1[i] == s1[i].toUpperCase()) {
y += s1[i].toLowerCase();
} else if (s1[i] == s1[i].toLowerCase()) {
y += s1[i].toUpperCase();
} else {
y += s1[i];
}
仅在else
条件为假的情况下才使用if
分支。
旁注:由于您使用的是ES2015 +语法(例如let
),因此您可以考虑将for-of
用于循环:
for (const ch of s1) {
if (ch == ch.toUpperCase()) {
y += ch.toLowerCase();
} else if (ch == ch.toLowerCase()) {
y += ch.toUpperCase();
} else {
y += ch;
}
}
答案 1 :(得分:0)
如果您只想对字母进行此操作,请在应用逻辑之前使用如下检查:
var letters = /^[A-Za-z]+$/;
if(inputtxt.value.match(letters)){
// do the logic here
}
else{
}
答案 2 :(得分:0)
我刚刚找到了kata。这是kata link
我认为您在弄清楚如何在lowerCase和upperCase之间进行转换(反之亦然)时遇到了一些麻烦。您可以按照以下说明进行操作。
如果仍然遇到问题,则可以检查我的解决方案,并获得一些有关其工作原理的见解,但我建议您在查看解决方案之前需要尝试一下。
const changeStr = (str, reverse = false) => {
let changedStr = str.split('').reduce((newStr, char) => {
if(char.toLowerCase() == char) {
return newStr += char.toUpperCase();
} else {
return newStr += char.toLowerCase();
}
}, '')
if(reverse) changedStr = changedStr.split('').reverse().join("");
return changedStr;
}
const concat = (str1, str2) => {
return `${changeStr(str2, true)}@@@${changeStr(str1, true)}${changeStr(str1)}`;
}
console.log(concat('FizZ', 'buZZ')) // zzUB@@@zZIffIZz