javascript - JavaScript 行转置密码 - 如何将键转换为列号
问题描述
我在将密钥中的字母转换为行转置密码中的字母顺序时遇到了一些麻烦。
例如,如果我们将单词“fruit”作为我们的键,它应该转换为以下数字序列:“ 6(f) 18(r) 21(u) 9(i) 20(t) ”
我设法使用此功能实现了这一点:
function filterKey(key) {
var result = [];
for (var i = 0; i < key.length; i++) {
var c = key.charCodeAt(i);
result.push((c - 65) % 32);
}
return result;
}
我的问题是:如何将上述数字序列转换为列号?
像这样:“6(f)18(r)21(u)9(i)20(t)” -> “1(f)3(r)5(u)2(i)4(t)”
解决方案
我不知道你是想在函数内部还是在返回结果之后这样做。
无论哪种方式,以下应该可以完成这项工作:
var key = "fruit";
var result = key.split("").map(function(x) {return (x.charCodeAt(0) - 65) % 32}); // (one-liner for your function)
var sorted = result.slice(0).sort(function(a, b) {return a - b});
var columnNumbers = result.map(function(x) {
var index = sorted.indexOf(x);
sorted[index] = 0; // reset value in case of duplicate chars
return index + 1;
});
console.log(columnNumbers);
请注意,这旨在处理密钥中的重复字母。
例如"froot"
将输出[1, 4, 2, 3, 5]
推荐阅读
- jquery - 如何在整个站点和重新加载时存储用户输入(在深色和浅色主题之间切换)
- swift - 什么是正确的 MTLRegion 参数?
- swift - 我如何打开 XIb 文件按钮到 ViewController
- c++ - 为什么链接时优化会导致分段错误?
- javascript - 如果在 Next.js 中动态路由 id 是“未定义”,我如何在 useEffect 挂钩中重定向没有运行函数的页面?
- laravel - 在您的集群弹性搜索 Laravel 和 Docker 中找不到活动节点
- javascript - 当链接在新标签页中打开时如何停留在当前窗口
- python - 从熊猫行中选择值
- reactjs - 如何在 Next.js 中设置 i18n 翻译的 URL 路由?
- vue.js - Vue.js 与 Vuex:如何包装 3rd 方库?