2010-11-04 4 views
8

Si j'ai une lettre en JavaScript, je voudrais trouver la lettre précédente dans l'ordre alphabétique, donc si l'entrée est "C", la sortie doit être "B". Existe-t-il des solutions standard ou dois-je créer des fonctions spéciales?Javascript: trouver la lettre précédente en alphabet

+7

Ce n'est probablement pas grave pour ce que vous faites, mais gardez à l'esprit que toute l'affaire des lettres suivantes/précédentes est très compliquée si vous essayez de le faire correctement, à l'échelle internationale. Les solutions ci-dessous sont l'approche ASCII/anglaise standard que tout le monde fait depuis des décennies, mais qui ne satisferait probablement pas en Turquie ou au Japon ... –

+0

Je dois dire que celui-ci ne sera jamais utilisé qu'en allemand, anglais , français ou italien, mais jamais avec une autre langue avec d'autres lettres. Et pour dire aussi, ce n'est pas une entrée de l'utilisateur, donc il est donné avec le programme (le chantier naval, les noms de champs sont par exemple B4, et je cherchais C4) –

Répondre

14
var ch = 'b'; 
String.fromCharCode(ch.charCodeAt(0) - 1); // 'a' 

Et si vous voulez faire une boucle autour de l'alphabet juste faire un contrôle spécifique pour « une » - boucle « z » si elle est, sinon utilisez la méthode ci-dessus.

5

Cela devrait fonctionner dans certains cas, vous pourriez avoir besoin de ruser un peu:

function prevLetter(letter) { 
    return String.fromCharCode(letter.charCodeAt(0) - 1); 
} 

Si letter est A, le résultat est @, vous devez donc ajouter un peu de bon sens vérifier si vous voulez c'est d'être infaillible. Sinon, devrait faire le travail très bien.

5

La fonction complète du commentaire de Tatu serait

function prevLetter(letter) { 
    if (letter === 'a'){ return 'z'; } 
    if (letter === 'A'){ return 'Z'; } 
    return String.fromCharCode(letter.charCodeAt(0) - 1); 
} 
1

Quelque chose comme cela devrait fonctionner.

function prevLetter(letter) { 
    var code = letter.charCodeAt(0); 
    var baseLetter = "A".charCodeAt(0); 
    if (code>"Z".charCodeAt(0)) { 
     var baseLetter = "a".charCodeAt(0); 
    } 
    return String.fromCharCode((code-baseLetter+25)%26+baseLetter); 
} 
Questions connexes