javascript - 使用 charCodeAt 和 charCodeFrom 时如何去掉空格?

标签 javascript

此函数包含一个 ROT13 密码,它首先拆分提供的字符串并将值移动 13。唯一的问题是它在返回时在单词之间包含破折号,我不确定如何解决该问题。

function rot13(str) { 

var strSplit = str.split('');
var strMap = strSplit.map(function(x) {
return (x.charCodeAt(0) + 13 - 65) % 26 + 65;
}); 

return String.fromCharCode.apply(this, strMap);
}


rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK.");

最佳答案

只需检查当前字符是否为空格。如果是,返回。否则,移动值:

function rot13(str) {

  var strSplit = str.split('');
  var strMap = strSplit.map(function(x) {
    return x === ' '                           // Is it a space?
      ? x.charCodeAt(0)                        // Then return the space
      : (x.charCodeAt(0) + 13 - 65) % 26 + 65; // If not, then apply the shift.
  });

  return String.fromCharCode.apply(this, strMap);
}


console.log(rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK."));

或者,更好的是,只移动您想要的字符:

function rot13(str) {

  var strSplit = str.split('');
  var strMap = strSplit.map(function(x) {
    return /[a-zA-Z]/.test(x)                 // Is it a letter?
      ? (x.charCodeAt(0) + 13 - 65) % 26 + 65 // Shift it! 
      : x.charCodeAt(0)                       // Otherwise, return the not-letter.
  });

  return String.fromCharCode.apply(this, strMap);
}


console.log(rot13("GUR DHVPX OEBJA QBT WHZCRQ BIRE GUR YNML SBK."));

关于javascript - 使用 charCodeAt 和 charCodeFrom 时如何去掉空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46157022/

相关文章:

javascript - 不会保存记录的属性

javascript - 提交对 extjs 存储中现有记录的更改

javascript - 如何调用 Backbone 集合内部的方法

javascript - 单击链接后 Jquery 切换输入值

Javascript 确认对话框需要点击 3 次 "cancel"才能关闭

javascript - Cloud Functions for Firebase 在数据库事件函数内执行写入操作

javascript - 你能单独使用 CSS 在 HTML 文本框中显示灰色提示吗?

javascript - 安装 Node v13 后来自 npm 的警告消息

javascript - 在javascript计时器中更改字体颜色

javascript - 一秒钟后用 Javascript 更改 CSS