Implement numbering scheme like A,B,C… AA,AB,… AAA…, similar to converting a number to radix26(实现像 A,B,C... AA,AB,... AAA... 这样的编号方案,类似于将数字转换为 radix26)
问题描述
可能重复:
Xnary(类似于二进制但不同)计数
在 JavaScript 中,我想在 JavaScript 中实现一个编号方案,以便 1 是 A,2 是 B,....26 是 Z,27 是 AA,28 是 AB .....
In JavaScript, I want to implement a numbering scheme in JavaScript so that 1 is A, 2 is B, .... 26 is Z, 27 is AA, 28 is AB .....
为此,代码如下:
function convertor(n){
var x = n-1,
baseCharCode = "A".charCodeAt(0);
var arr = x.toString(26).split(''),
len = arr.length;
return arr.map(function(val,i){
val = parseInt(val,26);
if( (i === 0) && ( len > 1)){
val = val-1;
}
return String.fromCharCode(baseCharCode + val);
}).join('');
}
它似乎工作正常,但有什么优化它的想法或其他实现方式吗?
It seems to work fine, but any ideas to optimize it or another way of implementing it ?
推荐答案
这个系统类似于Hexavigesimal(以 A = 0 开头)并称为双射 base-26(它没有 0).您可以使用标准的基本转换算法来转换它,如下所示:
This system is similar to Hexavigesimal (which starts with A = 0) and is called bijective base-26 (it has no 0). You can convert it using standard base-conversion arithmetic like this:
function toDecimal(str) {
var decimal = 0;
var letters = str.split(new RegExp());
for(var i = letters.length - 1; i >= 0; i--) {
decimal += (letters[i].charCodeAt(0) - 64) * (Math.pow(26, letters.length - (i + 1)));
}
return decimal;
}
基本上,您从十六进制转换为以 10 为底,如下所示.假设您必须字符串AB".你所拥有的是:
Essentially, you convert from hexavigesimal to base 10 as follows. Assume you have to string "AB". What you have then is:
1 0 (positions)
---
A B
+ +
| |
| +----> 2 * (26 ^ 0) +
+------> 1 * (26 ^ 1)
= 28
这给你 28.
另一个例子:
2 1 0 (positions)
A B C
+ + +
| | |
| | +----> 3 * (26 ^ 0) +
| +------> 2 * (26 ^ 1) +
+--------> 1 * (26 ^ 2)
= 731
这篇关于实现像 A,B,C... AA,AB,... AAA... 这样的编号方案,类似于将数字转换为 radix26的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:实现像 A,B,C... AA,AB,... AAA... 这样的编号方案,类似于将数字转换为 radix26


基础教程推荐
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- 直接将值设置为滑块 2022-01-01
- Chart.js 在线性图表上拖动点 2022-01-01