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"

1voto

dean schmid Points 111

Une solution juste pour rire

function nextLetter(str) {
  const Alphabet = [
    // lower case alphabet
    "a", "b", "c",
    "d", "e", "f",
    "g", "h", "i",
    "j", "k", "l",
    "m", "n", "o",
    "p", "q", "r",
    "s", "t", "u",
    "v", "w", "x",
    "y", "z",
    // upper case alphabet
    "A", "B", "C",
    "D", "E", "F",
    "G", "H", "I",
    "J", "K", "L",
    "M", "N", "O",
    "P", "Q", "R",
    "S", "T", "U",
    "V", "W", "X",
    "Y", "Z"
  ];

  const LetterArray = str.split("").map(letter => {
    if (Alphabet.includes(letter) === true) {
      return Alphabet[Alphabet.indexOf(letter) + 1];
    } else {
      return " ";
    }
  });

  const Assemble = () => LetterArray.join("").trim();
  return Assemble();
}

console.log(nextLetter("hello*3"));

1voto

Stephen Quan Points 4429

Voici une variation de l'algorithme rot13 que j'ai soumis sur https://stackoverflow.com/a/28490254/881441 :

function rot1(s) {
  return s.replace(/[A-Z]/gi, c =>
    "BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmnopqrstuvwxyza"[
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(c) ] )
}

Le code d'entrée est en bas et le codec recherché est en haut (c'est-à-dire que le code de sortie est le même que le code d'entrée mais décalé de 1). La fonction ne change que les lettres, c'est-à-dire que si un autre caractère est passé, il sera inchangé par ce codec.

1voto

Tomy-rex Points 162

Les réponses de Zar et Nathan sont toutes deux bonnes. Tout le reste me semble trop compliqué.

  • Je voulais spécifier mon propre jeu de caractères et je n'ai pas utilisé charCode.
  • Je n'avais pas besoin d'une récursion à plusieurs caractères.
  • ajouté 0 à mon jeu de caractères pour la gestion des erreurs ( while (letter != 0) )

Je me suis retrouvé avec ça :

let letter = "a";
let alphabet = "abcdefghijklmnopqrstuvwxyz0";
let nextletter = alphabet.substr(alphabet.indexOf(letter)+1,1);

Ensuite, je peux très simplement ajouter d'autres dimensions :

let alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!£$%^&*_0";

function increment(e) {
let letter = e.value;
let alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0";
let next = alphabet.substr(alphabet.indexOf(letter)+1,1);
document.getElementById("result").innerHTML = next;
};

<input type="text" minlength="1" maxlength="1" onchange="increment(this)" placeholder="type letter">
<button>Update</button>
<div id="result"></div>

0voto

Quentin 2 Points 188

Faire une fonction avec {a : 'b', b : 'c', etc} dans une fermeture:-

let nextChar = (s => (
    "abcdefghijklmopqrstuvwxyza".split('')
    .reduce((a,b)=> (s[a]=b, b)), // make the lookup
c=> s[c] // the function returned
))({}); // parameter s, starts empty

usage:-

nextChar('a')

Ajout de majuscules et de chiffres:-

let nextCh = (
    (alphabeta, s) => (
        [alphabeta, alphabeta.toUpperCase(), "01234567890"]
            .forEach(chars => chars.split('')
               .reduce((a,b) => (s[a]=b, b))), 
        c=> s[c] 
    )
)("abcdefghijklmopqrstuvwxyza", {});

p.s. Dans certaines versions de Javascript, vous pouvez utiliser [...chars] au lieu de chars.split('')

0voto

LokeshKumar Points 1
function charLoop(from, to, callback) {
    var i = from.charCodeAt(0);
    var to = to.charCodeAt(0);
    for (; i <= to; i++) {
        callback(String.fromCharCode(i));
    }
}

var sequence = "";
charLoop("A", "Z", function (char) {
    sequence += char + " ";
});

sequence = sequence.trim();
sequence = sequence.split(" ");

var resseq = sequence;
var res = "";
var prevlet = "";
var nextlet = "";

for (b = 0; b < resseq.length; b++) {
    if (prevlet != "") {
        prevlet = resseq[b];
    }

    for (a = 0; a < sequence.length; a++) {
        for (j = 1; j < 100; j++) {
            if (prevlet == "") {
                prevlet = sequence[a];
                nextlet = sequence[a + 1];
                res += sequence[a] + sequence[a] + 0 + j + " ";
            }
            else {

                if (j < 10) {
                    res += prevlet + sequence[a] + 0 + j + " ";
                }
                else {
                    res += prevlet + sequence[a] + j + " ";
                }
            }
        }
    }
}

document.body.innerHTML = res;

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