Thomas Zilliox
Intégrateur CSS Freelance à Lyon

Convertir des lettres en nombres en JavaScript

J’utilise toujours la même technique pour transformer des lettres en nombres selon leur position dans l’alphabet :

/**
 * Returns the letter position in the alphabet
 *
 * @param {string} letter - A letter to transform
 * @return {number} number - The position in the alphabet
 */
function letterToNumber(letter) {
  return parseInt(letter, 36) - 9;
}

Cette technique a deux intérêts par rapport à letter.charCodeAt(0) - 96 :

  1. Pas besoin de traitement spécifique pour gérer la casse ;
  2. Une fois assimilée, pas besoin de pense-bête, on peut la retrouver de tête.

Source : Stack Overflow

Exemples

letterToNumber("a"); // ✔ 1
letterToNumber("z"); // ✔ 26
letterToNumber("A"); // ✔ 1
letterToNumber("Z"); // ✔ 26
letterToNumber(" "); // ⨯ NaN
letterToNumber("!"); // ⨯ NaN
letterToNumber("0"); // ⨯ -9

Plus de contrôle

Le gros défaut de cette implémentation va être le manque de contrôle sur les cas d’erreur. Si le caractère n’est pas connu, vous obtiendrez NaN. Pour les chiffres, c’est encore plus compliqué, la fonction précédente renverra une valeur entre -9 et 0.

Il faut alors que l’on confirme la validité d’un caractère avant de le transformer en chiffre. C’est aussi l’occasion de pouvoir utiliser cette fonction sur des alphabets personnalisés, ce qui nous permettrait par exemple de décaler les chiffres également.

const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");

/**
 * Returns if the letter is in the alphabet
 *
 * @param {string} letter - A letter to transform
 * @return {boolean} true if the letter is present in the alphabet
 */
function isLetterInAlphabet(letter) {
  return alphabet.includes(letter.toUpperCase());
}

/**
 * Returns the letter position in the alphabet
 *
 * @param {string} letter - A letter to transform
 * @return {number} number - The position in the alphabet
 */
function letterToNumber(letter) {
  if (!isLetterInAlphabet(letter)) {
    return false;
  }

  return alphabet.indexOf(letter.toUpperCase()) + 1;
}

Exemples

letterToNumber("a"); // ✔ 1
letterToNumber("z"); // ✔ 26
letterToNumber("A"); // ✔ 1
letterToNumber("Z"); // ✔ 26
letterToNumber(" "); // ✔ false
letterToNumber("!"); // ✔ false
letterToNumber("0"); // ✔ false

Essayez


console.log(letterToNumber("a"));
console.log(letterToNumber("!"));

Amusez-vous bien, 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 ?