使用shiftChar()函数和Array.map()方法在Javascript中使用Caesar Cipher

前端之家收集整理的这篇文章主要介绍了使用shiftChar()函数和Array.map()方法在Javascript中使用Caesar Cipher前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试通过阅读大量的在线教程来学习 Javascript,并且正在通过应对coderbyte的挑战来练习.我遇到了CaesarCipher挑战的问题.该函数需要获取一个字符串和一个偏移量参数,然后返回字符串,每个字母字符移动所提供的任何偏移量(保留任何非字母字符完整).我已经使用了shiftChar()函数,它将获取char和偏移量,并仅对alpha字符应用shift,并返回新字符.现在已经完成,我想我可以只取原始字符串,将其拆分为数组,然后使用我的shiftChar()函数将该字符数组映射到新数组.但是,我无法让它工作,我似乎无法弄清楚为什么.

我对地图方法缺少什么?我的理解是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()返回一个数组,它不会修改原始数组.在您的示例中,您将新数组存储到结果中,但您的函数返回原始charArray,而不是结果,这是您想要的.

第二个问题是您要提供的回调函数. 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相关文章