Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用A、B、C、D而不是0、1、2、3。。。使用JavaScript_Javascript_Count_Numbers_Counter - Fatal编程技术网

用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();