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"
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"
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.
(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'
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>
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 ...
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 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.