如何使用javascript计算下一个修订号
How to use javascript to calculate the next revision number
我的应用程序中有一个修订号属性,它只是一个字符串。我需要传入当前值,计算下一个有效值并返回。
以下是有效的进展:
.A
.B
.C
0
0.A
0.B
1
1.A
etc
忘记全部数字吧,这是其他地方控制的。这只适用于有周期的。限制是:
- 第一个分量总是一个数字(或者什么都不是)
- 然后是一段时间
- 然后是一个字母,不包括I和O(因为它们类似于1和0),一旦你到达Z,它就应该变成AA、AB、AC。。。,ZZ
所以
If I pass in .A it should return .B
If I pass in 1.H it should pass back 1.J
If I pass in 1.Z it should pass back 1.AA
如有任何帮助,我们将不胜感激。
这是我所拥有的——我只是不知道如何"增加"字母部分:
function calcNextRev(currentRev)
{
var revParts = currentRev.split(".");
var majorRev = revParts[0];
var currentMinorRev = revParts[1];
???
return majorRev + "." + newMinorRev;
}
试试这个:
(此处演示)
var alfab=[A','B','C','D','E','F','G','H','J','K','L','M','N','p','Q','R','S','T','U','V','W','Y','Z';var currentRev="0.AZ";var结果;
function calcNextRev(currentRev) {
var newMinorRev;
var revParts = currentRev.split(".");
var majorRev = revParts[0];
var currentMinorRev = revParts[1];
//Case string is 1 letter long
if (currentMinorRev.length == 1) {
for (i = 0; i < alfab.length; i++) {
if (currentMinorRev == alfab[i]) {
if (i == alfab.length - 1) {
newMinorRev = alfab[0] + alfab[0];
} else {
var ii = i + 1;
newMinorRev = alfab[ii];
}
}
}
}
//Case string is more than one letter long
if (currentMinorRev.length > 1) {
var currentMinorRev2 = currentMinorRev.split("");
var l = currentMinorRev2.length - 1;
for (o = 0; o < alfab.length; o++) {
if (currentMinorRev2[l] == alfab[o] && o == alfab.length - 1)
{
var currentalias = currentMinorRev2;
currentalias[l] = alfab[0];
currentalias.push(alfab[0]);
newMinorRev = currentalias.join('');
}
if (currentMinorRev2[l] == alfab[o] && o != alfab.length - 1)
{
var xo = o + 1;
var currentalias = currentMinorRev2;
currentalias[l] = alfab[xo];
newMinorRev = currentalias.join('');
o++;
}
}
};
result = majorRev + "." + newMinorRev;
return result;
}
alert(calcNextRev(currentRev));
本质上,您所做的是计数,尽管以24为基数,并使用数字ABCDEFGHJKLMNPQRSTUVWXYZ
而不是"正常"0123456789ABCDEFGHIJKLMNO
。因此,我们将使用JavaScript鲜为人知的处理非10进制数字的能力,即parseInt(value,base)
和value.toString(base)
。
var letters = "ABCDEFGHJKLMNPQRSTUVWXYZ".split(""),
base24_to_letters_map = {},
letters_to_base24_map = {};
// Build maps from base 24 digits to desired range of letters and vice versa
for (var i=0; i<24; i++) {
base24_to_letters_map[i.toString(24)] = letters[i];
letters_to_base24_map[letters[i]] = i.toString(24).toUpperCase();
}
// Convert each digit in "val" based on "map"
function convert (val, map) {
return val.replace(/[0-9A-Z]/g, function(chr) { return map[chr]; });
}
function increment (version) {
var base24, number;
base24 = convert (version, letters_to_base24_map); // convert "BJ" to "1A"
number = parseInt (base24, 24); // convert "1A" to 34
number++; // increment
base24 = number.toString (24); // convert 35 to "1B"
version = convert (base24, base24_to_letters_map); // convert 1B to BK
return version;
}
这也给你三个字母和更多的版本号"免费";"ZZ"将变为"AAA"。此外,它还允许您轻松地向前或向后跳任意数量的版本。
处理前导数字版本号:
full_version.replace(/[A-Z][A-Z]?/, function (letter_portion) {
return increment (letter_portion);
});
相关文章:
- 滚动到容器中的下一个元素-几乎到了
- 后焦点更改为IE 11中的地址栏,而不是转移到表单中的下一个控件
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 使用ajax将数据从一个步骤发送到下一个步骤的3步表单
- AngularJS&JSON-从Previous&下一个对象
- 使用向下箭头键(与tab键一样)聚焦下一个输入
- 来自文档或下一个静态父级的事件委派
- angularjs移除焦点上的活动类并添加到下一个项目
- 禁用旋转木马中的下一个按钮和上一个按钮
- 当按下一个键时,请多次按下不同的键
- 正在加载下一个帖子
- 构建JS测试,警报窗口重复上一个Q,而不是问下一个Q
- 删除“;上一个“;以及“;下一个“;基于当前幻灯片
- 真正的下一个具有特定类的元素
- 如何使用javascript获取下一个/转发url
- Jquery 在单击当前类后计算下一个类
- 用javascript计算上一个结束日期和下一个开始日期之间的间隔
- 计算,下一个纬度
- 计算到下一个小时的时间
- 如何使用javascript计算下一个修订号