Thomas Zilliox
Expert CSS Freelance à Lyon

Décaler des lettres dans l’alphabet en JavaScript

Nous avons vu comment convertir des lettres en nombres et comment convertir des nombres en lettres en JavaScript dans des articles précédent. Ici, nous allons compiler les deux techniques pour permettre de décaler une lettre de n positions dans l’alphabet.

/**
 * Returns the shifted letter of an offset in the alphabet
 *
 * @param {string} letter
 * @param {number} offset
 * @return {number} The shifted letter
 */
function shiftLetter(letter, offset) {
  if (!isLetterInAlphabet(letter)) {
    return letter;
  }

  return numberToLetter(letterToNumber(letter) + offset);
}
Voir les dépendances
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");

// See https://tzi.fr/js/convertir-lettres-en-nombres/
function letterToNumber(letter) {
  if (!isLetterInAlphabet(letter)) {
    return false;
  }

  return alphabet.indexOf(letter.toUpperCase()) + 1;
}
function isLetterInAlphabet(letter) {
  return alphabet.includes(letter.toUpperCase());
}

// See https://tzi.fr/js/convertir-nombres-en-lettres/
function numberToLetter(position) {
  return getLetterByAlphabeticPosition(
    moduloClamp(position, 1, alphabet.length)
  );
}
function getLetterByAlphabeticPosition(position) {
  if (position < 1 || position > alphabet.length) {
    return false;
  }

  return alphabet[position - 1];
}

// See https://tzi.fr/js/modulos-min-max
function moduloClamp(number, min, max) {
  return positiveModulo(number - min, max + 1 - min) + min;
}

// See https://tzi.fr/js/modulos-positifs
function positiveModulo(number, divisor) {
  return ((number % divisor) + divisor) % divisor;
}

Exemples

shiftLetter("a", 0); // "A"
shiftLetter("a", 1); // "B"
shiftLetter("a", 25); // "Z"
shiftLetter("a", 26); // "A"
shiftLetter("a", -52); // "A"
shiftLetter("A", 1); // "B"

Essayez


console.log(shiftLetter('A', 0));
console.log(shiftLetter('A', 1));
console.log(shiftLetter('A', -1));

Joyeux Noël 🎄, Thomas.

That's my face!

Thomas ZILLIOX

L'homme qui murmurait à l'oreille des chevrons.

Je développe, j'intègre, je forme ou je conseille sur les CSS. Besoin d'améliorer la maintenabilité ou les performances de vos projets ?