132 votes

Quelle est une méthode qui peut être utilisée pour incrémenter les lettres ?

Quelqu'un connaît-il une bibliothèque Javascript (par exemple underscore, jQuery, MooTools, etc.) qui offre une méthode pour incrémenter une lettre ?

Je voudrais pouvoir faire quelque chose comme :

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

234voto

Nathan Wall Points 943

Une solution simple et directe

function nextChar(c) {
    return String.fromCharCode(c.charCodeAt(0) + 1);
}
nextChar('a');

Comme d'autres l'ont noté, l'inconvénient est qu'il peut ne pas traiter les cas comme la lettre "z" comme prévu. Mais cela dépend de ce que vous voulez en faire. La solution ci-dessus renverra '{' pour le caractère après 'z', et c'est le caractère après 'z' en ASCII, donc cela pourrait être le résultat que vous recherchez en fonction de votre cas d'utilisation.


Générateur de chaîne unique

(Mis à jour le 2019/05/09)

Comme cette réponse a reçu beaucoup de visibilité, j'ai décidé de l'étendre un peu au-delà de la portée de la question initiale pour aider potentiellement les personnes qui tombent sur cette réponse depuis Google.

Je trouve que ce que je veux souvent, c'est quelque chose qui génère des chaînes séquentielles et uniques dans un certain jeu de caractères (par exemple en utilisant uniquement des lettres), j'ai donc mis à jour cette réponse pour inclure une classe qui fera cela ici :

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();
    }
  }
}

Utilisation :

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'

63voto

Zar Points 1942

Un simple javascript devrait faire l'affaire :

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

26voto

Ron Royston Points 5179

Et si la lettre donnée est z ? Voici une meilleure solution. C'est A,B,C... X,Y,Z,AA,AB,... etc. En fait, il incrémente les lettres comme les ID des colonnes d'une feuille de calcul Excel.

nextChar('yz') ; // renvoie "ZA".

    function nextChar(c) {
        var u = c.toUpperCase();
        if (same(u,'Z')){
            var txt = '';
            var i = u.length;
            while (i--) {
                txt += 'A';
            }
            return (txt+'A');
        } else {
            var p = "";
            var q = "";
            if(u.length > 1){
                p = u.substring(0, u.length - 1);
                q = String.fromCharCode(p.slice(-1).charCodeAt(0));
            }
            var l = u.slice(-1).charCodeAt(0);
            var z = nextLetter(l);
            if(z==='A'){
                return p.slice(0,-1) + nextLetter(q.slice(-1).charCodeAt(0)) + z;
            } else {
                return p + z;
            }
        }
    }

    function nextLetter(l){
        if(l<90){
            return String.fromCharCode(l + 1);
        }
        else{
            return 'A';
        }
    }

    function same(str,char){
        var i = str.length;
        while (i--) {
            if (str[i]!==char){
                return false;
            }
        }
        return true;
    }

// below is simply for the html sample interface and is unrelated to the javascript solution

var btn = document.getElementById('btn');
var entry = document.getElementById('entry');
var node = document.createElement("div");
node.id = "node";

btn.addEventListener("click", function(){
  node.innerHTML = '';
  var textnode = document.createTextNode(nextChar(entry.value));
  node.appendChild(textnode);
  document.body.appendChild(node);
});

<input id="entry" type="text"></input>
<button id="btn">enter</button>

11voto

Sandeep Singh Points 101

Une façon de procéder pourrait être définie comme suit

function incrementString(value) {
  let carry = 1;
  let res = '';

  for (let i = value.length - 1; i >= 0; i--) {
    let char = value.toUpperCase().charCodeAt(i);

    char += carry;

    if (char > 90) {
      char = 65;
      carry = 1;
    } else {
      carry = 0;
    }

    res = String.fromCharCode(char) + res;

    if (!carry) {
      res = value.substring(0, i) + res;
      break;
    }
  }

  if (carry) {
    res = 'A' + res;
  }

  return res;
}

console.info(incrementString('AAA')); // will print AAB
console.info(incrementString('AZA')); // will print AZB
console.info(incrementString('AZ')); // will print BA
console.info(incrementString('AZZ')); // will print BAA
console.info(incrementString('ABZZ')); // will print ACAA
console.info(incrementString('BA')); // will print BB
console.info(incrementString('BAB')); // will print BAC

// ... and so on ...

4voto

Sushanth -- Points 34703

Vous pouvez essayer ceci

console.log( 'a'.charCodeAt​(0))​

D'abord, convertissez-le en nombre Ascii Incrémentez-le puis convertissez-le d'Ascii en caractères

var nex = 'a'.charCodeAt(0);
console.log(nex)
$('#btn1').on('click', function() {
   var curr = String.fromCharCode(nex++)
   console.log(curr)
});

Vérifiez FIDDLE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X