¿Cómo me aseguro de que las letras dobles se conviertan correctamente? Por ejemplo, quiero que aa se convierta en 2a en lugar de 1a1a .
var trans = { "a": "1a", "aa": "2a", "e": "1e", "ee": "2e", "o": "1o", "oo": "2o", } function transliterate() { var latin = document.getElementById('latin').value; var result = ''; var i; for (i = 0; i < latin.length; i++) { if (trans[ latin[i]] ) { result += trans[ latin[i]]; } } document.getElementById('result').innerHTML = result; return false; } document.getElementById('latin').addEventListener('keyup', transliterate); <input type="text" id="latin" /> <div id="result"></div>Deberá hacer cumplir su orden de prioridad, como aquí:
var trans = { "a": "1a", "aa": "2a", "e": "1e", "ee": "2e", "o": "1o", "oo": "2o", } let keys = ["aa", "ee", "oo", "a", "e", "o"]; function splitItems(input, index) { let temp = input.split(keys[index]); if (index + 1 === keys.length) return temp.join(trans[keys[index]]); let output = []; for (let item of temp) output.push(splitItems(item, index + 1)); return output.join(trans[keys[index]]); } function transliterate() { var latin = splitItems(document.getElementById('latin').value, 0); document.getElementById('result').innerHTML = latin; return false; } document.getElementById('latin').addEventListener('keyup', transliterate); <input type="text" id="latin" /> <div id="result"></div>EDITAR
Para ser claros, el caso de prueba tiene este resultado: