可用于递增字母的方法是什么?

2022-08-30 04:45:24

有没有人知道一个Javascript库(例如underscore,jQuery,MooTools等)提供了一种递增字母的方法?

我希望能够做这样的事情:

"a"++; // would return "b"

答案 1

简单、直接的解决方案

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'

答案 2

普通的javascript应该可以做到这一点:

String.fromCharCode('A'.charCodeAt() + 1) // Returns B