可用于递增字母的方法是什么?
2022-08-30 04:45:24
有没有人知道一个Javascript库(例如underscore,jQuery,MooTools等)提供了一种递增字母的方法?
我希望能够做这样的事情:
"a"++; // would return "b"
有没有人知道一个Javascript库(例如underscore,jQuery,MooTools等)提供了一种递增字母的方法?
我希望能够做这样的事情:
"a"++; // would return "b"
function nextChar(c) {
return String.fromCharCode(c.charCodeAt(0) + 1);
}
nextChar('a');
正如其他人所指出的那样,缺点是它可能无法按预期处理字母“z”之类的情况。但这取决于你想要从中得到什么。上面的解决方案将为“z”后面的字符返回“{”,这是ASCII中“z”之后的字符,因此根据您的用例,它可能是您要查找的结果。
(更新于2019/05/09)
由于这个答案已经获得了如此多的可见性,我决定将其扩展到原始问题的范围之外,以潜在地帮助那些从Google上绊倒它的人。
我发现我经常想要的是能够在特定字符集中生成顺序,唯一字符串的东西(例如仅使用字母),所以我更新了这个答案,以包括一个将在此处执行此操作的类:
class StringIdGenerator {
constructor(chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
this._chars = chars;
this._nextId = [0];
}
next() {
const r = [];
for (const char of this._nextId) {
r.unshift(this._chars[char]);
}
this._increment();
return r.join('');
}
_increment() {
for (let i = 0; i < this._nextId.length; i++) {
const val = ++this._nextId[i];
if (val >= this._chars.length) {
this._nextId[i] = 0;
} else {
return;
}
}
this._nextId.push(0);
}
*[Symbol.iterator]() {
while (true) {
yield this.next();
}
}
}
用法:
const ids = new StringIdGenerator();
ids.next(); // 'a'
ids.next(); // 'b'
ids.next(); // 'c'
// ...
ids.next(); // 'z'
ids.next(); // 'A'
ids.next(); // 'B'
// ...
ids.next(); // 'Z'
ids.next(); // 'aa'
ids.next(); // 'ab'
ids.next(); // 'ac'
普通的javascript应该可以做到这一点:
String.fromCharCode('A'.charCodeAt() + 1) // Returns B