用A、B、C、D而不是0、1、2、3。。。使用JavaScript
这可能是一个不寻常的请求,但对于我的脚本,我需要一个按字母而不是数字递增的函数。例如: 这是一个数字示例:用A、B、C、D而不是0、1、2、3。。。使用JavaScript,javascript,count,numbers,counter,Javascript,Count,Numbers,Counter,这可能是一个不寻常的请求,但对于我的脚本,我需要一个按字母而不是数字递增的函数。例如: 这是一个数字示例: var i = 0; while(condition){ window.write('We are at '+i); ++i; } 基本上,我想用字母来计数,就像MicrosoftExcel那样,而不是数字。因此,我需要打印“我们在0”,“我们在1”,“我们在2”,等等,而不是打印“我们在A”,“我们在B”,“我们在C”,等等 为了模仿Excel(我能想到的唯一例子),在达到索引25
var i = 0;
while(condition){
window.write('We are at '+i);
++i;
}
基本上,我想用字母来计数,就像MicrosoftExcel那样,而不是数字。因此,我需要打印“我们在0”,“我们在1”,“我们在2”,等等,而不是打印“我们在A”,“我们在B”,“我们在C”,等等
为了模仿Excel(我能想到的唯一例子),在达到索引25(Z)之后,我们可以转到“AA”、“AB”、“AC”等
因此,它将像这样工作:
var i = 0;
while(condition){
window.write('We are at '+toLetter(i));
++i;
}
如果有人可以编写一个函数,然后将字母转换回数字,即toNumber('a')=0或toNumber('DC')=107(我认为),则更好
谢谢 创建一个字母A、B、C、D等的数组。然后使用数组[0]调用A,因为0是A的索引,您可以使用数组[i]作为索引,只需验证,这样我就不能超过25 使用以下任一方法创建阵列:
var alphabet = new Array("A","B","C");
var alphabet = new Array(25);
alphabet[0] = "A";
alphabet[1] = "B";
alphabet[2] = "C";
而不是
toLetter(i)代码>使用字母表[i]代码>像这样的东西你是说
function num2chars(num, upper){
num2chars.letters = num2chars.letters || 'abcdefghijklmnopqrstuvwxyz'.split('');
var ret = repeat(num2chars.letters[num%26],Math.floor(num/26));
function repeat(chr,n){
if (n<1) {return chr;}
return new Array(n+1).join(chr);
}
return upper ? ret.toUpperCase() : ret;
}
//usage
while(i<104){
console.log(num2chars((i+=1),true));
}
//=> A..Z, AA..ZZ, AAA..ZZZ
函数num2字符(num,上限){
num2chars.letters=num2chars.letters | | |“abcdefghijklmnopqrstuvwxyz”。拆分(“”);
var ret=重复(num2字符字母[num%26],数学地板(num/26));
功能重复(chr,n){
如果(n请尝试以下方法。几分钟内尝试并测试
var prefix = Array('','A','B'); //this will extends to 3x26 letters. Determines the Max generated
//first element of prefix is `''` so you can have A B C D
var prefix = Array('','A','B');
var alphabets = Array('A','B','C','D'); //extend this to Z
var letters = Array();
function fillArray()
{
var prefix_len = prefix.length;
var array_len = prefix_len * alphabets.length;
var alpha_len = alphabets.length;
for(var i=0; i<prefix_len; i++)
{
for(var a=0; a<alpha_len; a++)
letters.push(''+prefix[i]+alphabets[a]);
}
}
function getLetter(index)
{
return letters[index];
}
function generateTestValues()
{
fillArray();
//make sure 10 is less than letters.length
for(var i=0; i<10; i++)
document.write(getLetter(i)+' '); //A B C D AA AB AC AD BA BB BC....
}
var prefix=Array(“”,'A','B');//这将扩展到3x26个字母。确定生成的最大值
//前缀的第一个元素是'''',所以可以有一个B C D
变量前缀=数组(“”,'A','B');
var alphabets=Array('A','B','C','D');//将其扩展到Z
变量字母=数组();
函数fillArray()
{
var prefix_len=prefix.length;
var array_len=前缀_len*alphabets.length;
var alpha_len=字母表长度;
对于(var i=0;i,这里有一个简单的递归函数将数字转换为字母
它是一个基,所以1是A,26是Z,27是AA
function toLetters(num) {
"use strict";
var mod = num % 26,
pow = num / 26 | 0,
out = mod ? String.fromCharCode(64 + mod) : (--pow, 'Z');
return pow ? toLetters(pow) + out : out;
}
以下是将字符串转换回数字的匹配函数:
function fromLetters(str) {
"use strict";
var out = 0, len = str.length, pos = len;
while (--pos > -1) {
out += (str.charCodeAt(pos) - 64) * Math.pow(26, len - 1 - pos);
}
return out;
}
测试:这就是生成随机字母的方法:
function getRandomArbitrary(min, max) {
max = Math.ceil(max);
min = Math.floor(min);
return Math.round(Math.random() * (max - min) + min);
}
function assignLetter(){
var group = ['A', 'B', 'C', 'D'];
var text = 'We are at ';
var str = '';
str = text + group[getRandomArbitrary(0, group.length-1)];
return str;
}
assignLetter();
很抱歉问一下,但是你尝试了什么?到目前为止,这对我来说像是一个家庭作业。所以你需要写toNumber()和toLetter()。这看起来像是一个非常简单的算法任务。向我们展示你尝试了什么。你可以构建一个字母数组,然后将你的计数与数组中的键进行比较(确保补偿“0”位置)。如果你的计数从零开始,那么你就很好。我通过思考基数26找到了一个解决方案。这段代码非常糟糕。它将数字转换为字符串,然后返回并修复它。这样会更好(也更容易)直接转换它。我不认为我会这样做,但如果我这样做了,我会用字母表中的所有字符创建一个字符串。JavaScript允许您使用数组表示法访问字符串的字符。另外:不需要通过数组构造函数在数组中预分配空间;它实际上在任何现代r中都不会做任何事情untime.JavaScript允许您将字符串作为数组进行索引,因此实际上不需要.split()
。@Pointy:将我的注释移到这里,因为它更相关。为了IE(我认为是8及以下版本),需要.split()
。否则您需要.charAt()
。哦,真的吗?嗯……我应该确保我最近没有编写任何IE8错误:-)差不多。第三行应该是var out=String.fromCharCode(65+(num%26));
否则它将是零基的。@Jules它被严重破坏了……现在告诉我你对它的看法:)你的答案仍然在帮助人们解决这个奇怪的要求。非常感谢!!OP不想要随机的字母,他/她想要excel中的顺序
function getRandomArbitrary(min, max) {
max = Math.ceil(max);
min = Math.floor(min);
return Math.round(Math.random() * (max - min) + min);
}
function assignLetter(){
var group = ['A', 'B', 'C', 'D'];
var text = 'We are at ';
var str = '';
str = text + group[getRandomArbitrary(0, group.length-1)];
return str;
}
assignLetter();