transliterating cyrillique au latin avec une fonction javascript
J'ai fait cette fonction:
function transliterate(word){
var answer = "";
A = new Array();
A["Ё"]="YO";A["Й"]="I";A["Ц"]="TS";A["У"]="U";A["К"]="K";A["Е"]="E";A["Н"]="N";A["Г"]="G";A["Ш"]="SH";A["Щ"]="SCH";A["З"]="Z";A["Х"]="H";A["Ъ"]="'";
A["ё"]="yo";A["й"]="i";A["ц"]="ts";A["у"]="u";A["к"]="k";A["е"]="e";A["н"]="n";A["г"]="g";A["ш"]="sh";A["щ"]="sch";A["з"]="z";A["х"]="h";A["ъ"]="'";
A["Ф"]="F";A["Ы"]="I";A["В"]="V";A["А"]="A";A["П"]="P";A["Р"]="R";A["О"]="O";A["Л"]="L";A["Д"]="D";A["Ж"]="ZH";A["Э"]="E";
A["ф"]="f";A["ы"]="i";A["в"]="v";A["а"]="a";A["п"]="p";A["р"]="r";A["о"]="o";A["л"]="l";A["д"]="d";A["ж"]="zh";A["э"]="e";
A["Я"]="YA";A["Ч"]="CH";A["С"]="S";A["М"]="M";A["И"]="I";A["Т"]="T";A["Ь"]="'";A["Б"]="B";A["Ю"]="YU";
A["я"]="ya";A["ч"]="ch";A["с"]="s";A["м"]="m";A["и"]="i";A["т"]="t";A["ь"]="'";A["б"]="b";A["ю"]="yu";
for (i in word){
if (A[word[i]] === 'undefined'){
answer += word[i];
}
else {
answer += A[word[i]];
}
return answer;
}
}
Maintenant, il devrait translittérer cyrillique texte latin et laissez latine, il suffit de passer. Mais il ne parvient à translittérer le premier plus tard et dans le cas du latin, il donne pas défini comme une réponse. Quelqu'un pourrait-il me donner une idée, ce que je fais mal?
Un ide? Comme dans un environnement de développement intégré ou idée?
OriginalL'auteur kyng | 2012-07-09
Vous devez vous connecter pour publier un commentaire.
Couple de choses...
Voici le code
Plus fonctionnelle est comme ça...
Aimé le fonctionnel. Compact et concis!
Salut, savez-vous si il y a une bibliothèque qui le fait ? (en auraient besoin pour autre alphabet)
OriginalL'auteur Split Your Infinity
Dans mes projets, je suis en utilisant cette méthode de transliterating:
Exécuter cet exemple de translittérer:
J'ai remplacé toutes les lettres russes avec leur unicode analogues (chaque lettre commence par \u) pour résoudre des problèmes avec l'encodage dans le fichier Javascript.
Pour vérifier la vitesse d'exécution, j'ai pris la meilleure réponse à cette question, et par rapport à mon exemple. Ma méthode semble être plus rapide en plusieurs fois (0,16 ms dans Firebug :-).
OriginalL'auteur Ali Mamedov
Ne pas utiliser un tableau pour cette tâche. Ne pas utiliser
for in
pour itérer une chaîne de caractères. Ne pas vérifier l'encontre de la chaîne"undefined"
. Ne pasreturn
dans lefor
boucle.Voici un jsFiddle démonstration.
var i
dans la boucle de construire. Ne mettez pasvar c
dans le corps de la boucle. Pourquoi: Pauvres, mal compris, malvar
+1 sinonJe sais qu'il définit comme une fonction de la portée, et je suis parfaitement heureux avec le fait. C'est simplement une convention de codage. Merci à vous, si.
Charmander: Une mauvaise. Si vous souhaitez activement à induire en erreur les gens qui maintiennent votre code, bien que, par tous les moyens de continuer. 😉 (À noter que
let
est à venir pour JavaScript, ce qui tout à fait de cette utilisation devar
plus précaire.)OriginalL'auteur
Votre principal problème est que le
return
est au mauvais endroit. C'est à l'intérieur de votre boucle, on en revient donc à la première itération. Modifier:Notez que j'ai fixé l'indentation. Conforme à l'indentation vous permet d'éviter ces sortes de bugs.
Remarque 1: Il n'y a rien sur votre
A
objet qui utilise le fait que c'est unArray
. Vous êtes juste à l'utiliser comme une carte. En JavaScript, tous les objets sont des cartes, donc, plutôt que deA = new Array();
suffit d'utiliserA = {};
.Note 2:
A
eti
ne sont jamais déclarés dans votre fonction, vous êtes en proie à la L'Horreur de l'Implicite Globals. Pour la fixer, de les déclarer avecvar
.Note 3: ne pas utiliser
for..in
à boucle à travers les caractères d'une chaîne, ni l'utilisation de[]
à l'index dans la chaîne, est plus fiable dans les moteurs JavaScript. Au lieu de cela, utiliserfor (i = 0; i < word.length; ++i)
et puisch = word.charAt(i);
pour obtenir le caractère à cette position, puis utilisezch
dans votre code dans la boucle.Note 4: Vous pouvez utiliser la Curieusement puissant
||
operator de raccourcir votre code, par exemple:OriginalL'auteur T.J. Crowder
En combinant les recommandations de Bart Riemens et T. J. Crowder, je suis venu avec ce code, que les coutures à faire le tour bien:
Que vous!
Riemens N'avais pas remarqué au début, mais il semble plus courte et la plus universelle.
OriginalL'auteur kyng