Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nisael

Simplificar Código javascript

Recommended Posts

Fala galera, sou novato em javascript e fiz esse código

function text_to_number_object(text){
				
				text = text.replace(/a/g,1);
				text = text.replace(/á/g,1);
				text = text.replace(/à/g,1);
				text = text.replace(/â/g,1);
				text = text.replace(/ã/g,1);
				
				
				text = text.replace(/b/g,2);
				text = text.replace(/c/g,3);
				text = text.replace(/d/g,4);
				
				text = text.replace(/e/g,5);
				text = text.replace(/é/g,5);
				text = text.replace(/è/g,5);
				text = text.replace(/ê/g,5);
				
				text = text.replace(/f/g,6);
				text = text.replace(/g/g,7);
				text = text.replace(/h/g,8);
				
				text = text.replace(/i/g,9);
				text = text.replace(/í/g,9);
				text = text.replace(/ì/g,9);
				text = text.replace(/î/g,9);
				
				text = text.replace(/j/g,10);
				text = text.replace(/k/g,11);
				text = text.replace(/l/g,12);
				text = text.replace(/m/g,13);
				text = text.replace(/n/g,14);
				
				text = text.replace(/o/g,15);
				text = text.replace(/ó/g,15);
				text = text.replace(/ò/g,15);
				text = text.replace(/õ/g,15);
				text = text.replace(/ô/g,15);
				
				text = text.replace(/p/g,16);
				text = text.replace(/q/g,17);
				text = text.replace(/r/g,18);
				text = text.replace(/s/g,19);
				text = text.replace(/t/g,20);
				
				text = text.replace(/u/g,21);
				text = text.replace(/ú/g,21);
				text = text.replace(/ù/g,21);
				text = text.replace(/û/g,21);
				
				text = text.replace(/v/g,22);
				text = text.replace(/w/g,23);
				text = text.replace(/x/g,24);
				text = text.replace(/y/g,25);
				text = text.replace(/z/g,26);
				
				text = text.replace(/ /g,27);
											
				var r = "{";
				
				for(i in text)					
					r += "controle_"+i+":"+text[i]+",";
				
				r = r.substring(0,(r.length-1));
				
				r += "}";
				
				eval("var omega = "+r);
				
				return omega;
				
			};

Sera que tem como dar uma resumida nele, deixando mais eficiente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira coisa q dá para fazer é agrupar as letras iguais

        text = text.replace(/[aáàâã]/g,1);
        
        text = text.replace(/b/g,2);
        text = text.replace(/c/g,3);
        text = text.replace(/d/g,4);
        
        text = text.replace(/[eéèê]/g,5);
        
        text = text.replace(/f/g,6);
        text = text.replace(/g/g,7);
        text = text.replace(/h/g,8);
        
        text = text.replace(/[iíìî]/g,9);
        
        text = text.replace(/j/g,10);
        text = text.replace(/k/g,11);
        text = text.replace(/l/g,12);
        text = text.replace(/m/g,13);
        text = text.replace(/n/g,14);
        
        text = text.replace(/[oóòõô]/g,15);
        
        text = text.replace(/p/g,16);
        text = text.replace(/q/g,17);
        text = text.replace(/r/g,18);
        text = text.replace(/s/g,19);
        text = text.replace(/t/g,20);
        
        text = text.replace(/uúùû/g,21);
        
        text = text.replace(/v/g,22);
        text = text.replace(/w/g,23);
        text = text.replace(/x/g,24);
        text = text.replace(/y/g,25);
        text = text.replace(/z/g,26);
E ai, você deve deixar o trabalho repetido para a linguagem de programação.

 

a linha:

text = text.replace(ER, NUMBER);
se repete muitas vezes, apenas variando o ER e o NUMBER.

Então essa linha deve ficar dentro de um loop. Apenas trocando os argumentos.

 

Tendo enxergado isso, basta fazer:

<script>
var txt = 'bla ble bli blo blu';
var arr = [
  { 'name': 'a', 'value': 1 },
  { 'name': 'b', 'value': 2 },
  { 'name': 'e', 'value': 5 },
  { 'name': 'i', 'value': 9 },
  { 'name': 'l', 'value': 12 },
  { 'name': 'o', 'value': 15 },
  { 'name': 'u', 'value': 21 }
];


arr.forEach(function(each) {
  var re = new RegExp(each.name, 'g');
  txt = txt.replace(re, each.value)
});

console.log(txt);
</script>
saída:

2121 2125 2129 21215 21221

Mas note que isso não tem nada a ver com "eficiente". Eficiência é medida em performance, que é medida em tempo de execução. Não estamos mexendo nisso, estamos apenas refatorando para melhorar a leitura e deixar "melhor".

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.