Reputation: 101
How do I make sure that double letters are converted correctly? For example I want aa to become 2a instead of 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>
Upvotes: 0
Views: 78
Reputation: 76601
You will need to enforce your order of priority, like here:
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>
EDIT
To be clear, the test case has this result:
Upvotes: 2