gpt4 book ai didi

javascript - Javascript 中的凯撒密码使用 shiftChar() 函数和 Array.map() 方法

转载 作者:数据小太阳 更新时间:2023-10-29 04:47:41 27 4
gpt4 key购买 nike

我正在尝试通过阅读大量在线教程来学习 Javascript,并通过应对 coderbyte 上的挑战来进行练习。我在 CaesarCipher 挑战中遇到问题。该函数需要一个字符串和一个偏移量参数,然后返回每个字母字符按提供的偏移量移动的字符串(保留所有非字母字符)。我的 shiftChar() 函数正在运行,它将获取 char 和偏移量,并将仅对字母字符应用移位,并将返回新字符。现在已经完成了,我想我可以只获取原始字符串,将其拆分为一个数组,然后使用我的 shiftChar() 函数将该字符数组映射到一个新数组。但是,我无法让它工作,而且我似乎无法弄清楚原因。

关于 map 方法我是否遗漏了什么?我的理解是 map 方法会自动将调用它的数组中的每个元素作为第一个参数传递。然后我只是将我的偏移值作为附加参数传递。有人可以阐明为什么这不起作用并提出更可行的方法吗?

/*
Using the JavaScript language, have the function CaesarCipher(str,num) take the str parameter and perform a Caesar Cipher shift on it using the num parameter as the shifting number. A Caesar Cipher works by shifting each letter in the string N places down in the alphabet (in this case N will be num). Punctuation, spaces, and capitalization should remain intact. For example if the string is "Caesar Cipher" and num is 2 the output should be "Ecguct Ekrjgt".
*/

var str = 'Caesar Cipher';

function CaesarCipher(str, offset){
var charArray = str.split('');
var result = charArray.map( shiftChar( char, offset )).join('');

function shiftChar(char, offset){
var isAlpha = /[A-z]/;

if(isAlpha.test(char)){
char = String.fromCharCode(char.charCodeAt(0) + offset);
if(char > 'Z' && char < 'a' || char > 'z')
char = String.fromCharCode(char.charCodeAt(0) - 26);
}
return char;
}
return result;
}

console.log(CaesarCipher( str, 2));

最佳答案

您的代码中有一些东西阻止您获得预期的结果。

Array.map() 返回一个数组,它不会修改原始数组。在您的示例中,您将新数组存储到 result 中,但您的函数返回原始 charArray,而不是 result,这就是您想要。

第二个问题是您提供给 map 的回调函数。 map的第一个参数应该是一个函数,但是shiftChar(char, offset)不是函数,它是调用shiftChar的结果。 (我希望这部分有意义)。通常在使用 map 时,您会创建一个匿名函数,它将接收下面文档中指定的参数。在您的情况下,您需要执行以下操作:

var result = charArray.map( function(char) { return shiftChar(char, offset); } ).join('');

Array.map 引用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

完整的 jsfiddle 示例:http://jsfiddle.net/p2fkLs2t/

关于javascript - Javascript 中的凯撒密码使用 shiftChar() 函数和 Array.map() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com