在尝试(失败)为Odin项目编写凯撒密码任务之后,我终于屈服了,并找到了答案。不过,我不太明白。
我正在寻求一个解释每一行做和为什么它的工作。我复制的代码对每一行做了一些简短的描述,但我仍然不明白它是如何工作的。
const caesar = function (str, amount) {
// Wrap the amount
if (amount < 0) {
return caesar(str, amount + 26);
}
// Make an output variable
var output = "";
// Go through each character
for (var i = 0; i < str.length; i++) {
// Get the character we'll be appending
var c = str[i];
// If it's a letter...
if (c.match(/[a-z]/i)) {
// Get its code
var code = str.charCodeAt(i);
// Uppercase letters
if (code >= 65 && code <= 90) {
c = String.fromCharCode(((code - 65 + amount) % 26) + 65);
}
// Lowercase letters
else if (code >= 97 && code <= 122) {
c = String.fromCharCode(((code - 97 + amount) % 26) + 97);
}
}
// Append
output += c;
}
// All done!
return output;
};发布于 2020-12-04 20:05:59
第一个if-声明:
if (amount < 0) {
return caesar(str, amount + 26)
}确保移动量为0或更高,为此调用它自己,直到它是。然后,下面的行循环遍历整个字符串中的所有字符。
for (var i = 0; i < str.length; i++) {对于每一个字符,它都会检查它是否使用某种名为regex的字母(谷歌获取更多信息)。
if (c.match(/[a-z]/i)) {线
var code = str.charCodeAt(i);获取表示字符串中"i“位置的字符的数字。数字是计算机表示字母和其他字符的方式。大写和小写字符有两个完全不同的数字相关联。这就是下面两个if-语句的意义所在。我会解释小写字母,你应该能够看到大写字母是如何工作的。
c = String.fromCharCode(((code - 65 + amount) % 26) + 65);它首先从数字中减去65。这是因为第一个小写字母"a“的值为65。在此之后,它将结果以“量”的形式移动。这个“%-符号”看起来很奇怪。但它所做的只是将两边分开,然后返回"rest",即剩余数。例如,如果我们写:
5 % 2它等于1,这是为了“循环”这个数字,并将其保持在0到26之间。在此之后,它会将65相加,并将数字返回到一个字符。最后一行:
output += c;将该字符添加到结果字符串中。希望这能帮到你!
https://stackoverflow.com/questions/65149100
复制相似问题