本质上,您正在做的是count,尽管是以 24 为基数,并使用 as 数字ABCDEFGHJKLMNPQRSTUVWXYZ
而不是 "normal" 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);
});