这是我的代码
const caesar = function(x, y) {
let alphaListLower = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
let alphaListUpper = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
let userInput = x.split("")
let result = []
for(let i = 0; i < userInput.length; i++){
for(let e = 0; e < alphaListUpper.length; e++){
if (userInput[i] === alphaListLower[e] ){
if(e+y < 26){
result.push(alphaListLower[e+y])
}else{
result.push(alphaListLower[e+y-26])
}
}else if(userInput[i] === alphaListUpper[e] ){
if(e+y < 26){
result.push(alphaListUpper[e+y])
}else{
result.push(alphaListUpper[e+y-26])
}
}else if(userInput[i] === "!" || "," || " "){
result.push(userInput[i])
}
}
}
result = result.join("")
return result
};
如果我给出一个参数“你好,世界!”它应该返回“Mjqqt,Btwqi!”
我对您的代码做了一些更改。首先,我们要看看这个条件:
console.log(Boolean(2 === "!" || "," || " "))
无论您将
2
替换为什么,上面的内容都将始终返回 true。原因是即使第一个条件可能为 false || "," || " "
也总是会评估为 true。 “,”根本不是一个真实的条件,而是一个真实的表达式,因此在管道运算符之间使用它总是返回 true。所以我猜你会在你的列表中添加越来越多的角色而不自觉(<= 25 times extra per letter in the string).
理想情况下,您应该从内部循环中移出该条件,因为它与字母表无关。就放在外面吧。
我对您的代码进行了最小的更改,因此改进仍然取决于您。但以下有效:
const caesar = function(x, y) {
let alphaListLower = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
let alphaListUpper = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
let userInput = x.split("");
let result = [];
for(let i = 0; i < userInput.length; i++){
let added = false;
for(let e = 0; e < alphaListUpper.length; e++){
if (userInput[i] === alphaListLower[e]){
result.push(alphaListLower[(e + y) % 26]);
added = true;
break;
} else if (userInput[i] === alphaListUpper[e]){
result.push(alphaListUpper[(e + y) % 26]);
added = true;
break;
}
}
// If the character is not a letter and is a special character like !, , or space, add it directly to the result
if (!added && ["!", ",", " "].includes(userInput[i])) {
result.push(userInput[i]);
}
}
return result.join("");
}
console.log(caesar("Hello, World!", 2)); // Shift by 2