使用javascript生成字母数字序列

使用javascript生成字母数字序列,javascript,Javascript,我需要根据输入使用javascript生成如下自定义序列。例如:如果我提供的输入是AA1,那么输出应该是AA2,如果提供的输入是AA9,那么输出应该是AB0。我可以通过创建令牌来处理if-else,但看起来我们需要保留这么多if-else条件。想知道更有效的处理方法 AA0 AA1 AA2 AA3 AA4 AA5 AA6 AA7 AA8 AA9 AB0 AB1 AB2 AB3 AB4 AB5 AB6 AB7 AB8 AB9 AC0 AC1 . . . ZZ9 您可以使用两个函数来指定十进制或奇

我需要根据输入使用javascript生成如下自定义序列。例如:如果我提供的输入是
AA1
,那么输出应该是
AA2
,如果提供的输入是
AA9
,那么输出应该是
AB0
。我可以通过创建令牌来处理if-else,但看起来我们需要保留这么多if-else条件。想知道更有效的处理方法

AA0
AA1
AA2
AA3
AA4
AA5
AA6
AA7
AA8
AA9
AB0
AB1
AB2
AB3
AB4
AB5
AB6
AB7
AB8
AB9
AC0
AC1
.
.
.
ZZ9

您可以使用两个函数来指定十进制或奇数,并检查最后一个数字是否为9

函数增量(值){
常数
十进制=s=>数组
.from(s,v=>parseInt(v,36)-10)
.减小((s,v)=>s*26+v,0),
fancy=n=>数组
.from(n.toString(26),v=>(parseInt(v,26)+10)。toString(36))
.加入(“”)
.toUpperCase(),
[left,right]=value.match(/\D+\D+/g);
如果(值=='ZZ9')返回'AA0';
返回右侧=='9'
花式(十进制(左)+1)+“0”
:左+(+右+1);
}
console.log(增量('AA0'));//AA1
console.log(增量('AZ9'));//钡
console.log(增量('ZZ9'));//AA0
使用您可以反向迭代字符串,根据需要使用字符的值(由0的偏移量调整)递增每个字符,并根据相应的循环长度(10表示整数,26表示字母)循环。累加器跟踪是否在下一次迭代中求和,以及结果字符串

const incrementAlphaNumeric=(str)=>{
让iter,min,len;
返回[…str]
.reduceRight((a,c,i)=>{
设code=c.charCodeAt();

如果(code>=48&&code=65&&code我手头有一点时间,这似乎是一个有趣的挑战,所以我继续构建了一个函数,它可以接受任何大写字母和/或数字字符串。我意识到这对于问题的要求可能有点过分,但它确实满足了所有的要求,并且满足了其他人的要求将来遇到这个问题时,可能会发现这很有帮助

它的工作原理是将最右边的字符转换为其各自的字符代码,将其递增
1
,并检查生成的字符代码是否超出
A-Z
0-9
范围。如果超出其范围,我们将其重置为“基值”(
A
0
)并设置一个
进位
标志(这与二进制加法器电路的工作原理非常相似)。如果设置了
进位
标志,我们将使用下一个最右字符递归调用函数,直到不再需要进位为止。此时,我们只返回新字符串

增量('AA0')>'AA1

增量('AA9')>'AB0

增量('ZZ9')>'AA0

increment('AZ9BE')>'AZ9BF

常数A=65
常数Z=90
常数0=48
常数9=57
常量isDigit=(char)=>char>=48&&char char+1>9?0:char+1
常数incLetter=(char)=>char+1>Z?A:char+1
常量codeToChar=(代码)=>String.fromCharCode(代码)
常量setChar=(索引、字符、字符串)=>{
常量charArr=[…str]
字符拼接(索引,1,字符)
返回字符联接(“”)
}
常量增量=(str,place=str.length-1)=>{
如果(位置<0)返回str;
const char=str.charCodeAt(位置)
const nextChar=isDigit(字符)?incDigit(字符):incLetter(字符)
const carry=nextChar-char!==1;
str=setChar(位置,代码目录(nextChar),str)
如果(携带)
返回增量(str,--place)
否则返回str
}
让demoStr='AA0'
设置间隔(()=>{
demoStr=增量(demoStr)
console.log(demoStr)

},25)
您可以使用此
next()
函数,该函数通过将输入字符串的字母转换为以26为基数的数字字符串来递增,并在检测到因递增输入字符串的小数部分而溢出时返回:

const next=(()=>{
常量charCodeA='A'。charCodeAt(0);
常量to=(replacer,string)=>string.replace(//g,replacer);
const padStart=(string,{length},pad)=>string.padStart(length,pad);
const truncate=(string,{length})=>string.slice(-length);
常量字母=(base26String)=>String.fromCharCode(
parseInt(base26String,26)+charCodeA
);
常量base26=(字母字符串)=>(
letterString.charCodeAt(0)-charCodeA
).toString(26);
常量增量=(numberString,基数)=>(
parseInt(numberstring,基数)+1
).toString(基数);
返回(上一个)=>{
const[,prevL,prevD]=上一个匹配(/^([A-Z]+)([0-9]+)$/);
const nextD=padStart(增量(prevD,10),prevD,'0');
常量进位=nextD.length>prevD.length;
const nextL=进位
?焊盘起始(至(字母,增量(至(base26,prevL),26)),prevL,'A')
:prevL;
返回truncate(nextL,prevL)+truncate(nextD,prevD);
};
})();
console.log(next('AA0');//AA1
console.log(next('AZ9');//BA0
console.log(next('ZZ9');//AA0
console.log(next('AAA00');//AAA01
console.log(下一个('AZZ09');//AZZ10
console.log(next('AZZ99');//BAA00

console.log(下一个('ZZZ99'));//AAA00
所以它在十六进制中添加了1?-编辑:no@evolutionxbox它实际上是前两个字母中的字母字符,然后每个序列(如AA0、AA1…AA9、AB0、AB1…AB9、ZA0、ZA1…ZZ9)的数字从0递增到9。请使用并尝试一下。下一个值是什么请考虑“许多if-else条件”。(您可以在认为重复的地方将其缩写)。但是,是的,您需要一些条件来处理。否则,它只是一个不常见(混合!)基中的简单算术加法。
increment('ZZ9'))
结果是
'BAA0'
而想要的值是什么?OP sai