javascript - 使用另一个数组的索引从数组中获取元素
问题描述
我正在研究一个 Codewars 问题,并且已经能够解决这个问题的大部分,除了最后一部分。挑战是“rot13”
ROT13 是一种简单的字母替换密码,它用字母表中的 13 个字母替换一个字母。ROT13 是凯撒密码的一个例子。创建一个接受字符串并返回使用 Rot13 加密的字符串的函数。
function rot13(message){
message = message.split('');
let alphabet = ['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 indexes = message.map(char => alphabet.indexOf(char));
let result = indexes.map(i => {
let val = i + 13;
let max = 26;
if (val > max) {
let temp = val - max;
val = temp;
}
return val;
});
//result = [6, 17, 5, 6];
//i want to use the elements in my result array, and
//grab the letters from my alphabet array whose indexes associate with those elements from my result array
}
rot13('test') // 'grfg'
这是我目前在这个问题上的状态。我尝试检查字母表中元素的任何索引是否===我的结果数组中的元素,如果是,将这些字符从我的字母表数组推入一个空数组,但我收到-1
解决这个问题/改变我的思维过程的任何建议都会有所帮助。谢谢!
解决方案
使用另一个通过索引map()
转换result
回字符alphabet
。然后使用join('')
使其成为一个字符串。然后将其返回给调用者。
您可以使用模数简化 ROT13 计算。
function rot13(message) {
message = message.split('');
let alphabet = ['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 indexes = message.map(char => alphabet.indexOf(char));
let result = indexes.map(i => {
let val = (i + 13) % 26;
return val;
});
return result.map(i => alphabet[i]).join('');
}
console.log(rot13('test'));
请注意,这只有在字符串仅包含小写字母时才能正常工作。其他任何东西都会-1
从中返回indexOf
,你需要检查一下。
推荐阅读
- javascript - React Js - 无法在输入字段中输入值
- excel - 如何使用基于自定义数字格式的 countif
- testing - 赛普拉斯抛出 SyntaxError: 'import' 和 'export' 可能只出现在 'sourceType: module' (17:0)
- node.js - 使用 MulterGoogleStorage 和 NestJS 删除文件
- java - 拆分数字时将空字符串添加到字符串数组
- java - Java保存文件在程序重新启动时清除
- c++ - 如何验证所有正确的输入数字C++
- c - 如何在 C txt 文件中读取一行中的单词数
- python-3.x - 用于为模型创建 train.record 的 Tensorflow KeyError
- python - discord.py 嵌入带有时间戳的页脚