Hola
Respecto a tus preguntas
Cita: 1ª Por que sino el último elemento del array sería undefined
2ª Lo puedes ordenar o no ordenarlo, no influye en nada, puesto que se ha de recorrer toda la matriz aleat. Con respecto a esto también he hecho alguna modificación para no evaluar indices que ya están evaluados
Fíjate en los cambios con respecto al script anterior
Código Javascript
:
Ver original<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml"lang="es" xml:lang="es">
<head>
<script type="text/javascript">
function alternar(t1, t2){
var letras = t1.value.toLowerCase().split('');
var cant = Math.round(Math.random()*letras.length);
var aleat = new Array();
for (b = 0; b<cant; b++){
aleat[b] = Math.round(Math.random()*letras.length);
}
ordenaArray = aleat.sort();
var aceptados = /[a-z\s]/;
var mayuscula = '';
var result = '';
for(t = 0; t<letras.length; t++){
for(z = 0; z < ordenaArray.length; z++) {
if(t == ordenaArray[z]){
ordenaArray.splice(z,1) // eliminamos este elemento
if (aceptados.test(letras[t])) {
mayuscula = letras[t];
result += letras[t].toUpperCase();
break;
} else {
result += letras[t];
mayuscula = letras[t];
break;
}
}
}
if(letras[t] != mayuscula) {
ordenaArray.splice(t,1) // eliminamos este elemento
result += letras[t];
mayuscula = '';
}
}
t2.innerHTML = result;
}
</script>
</head>
<body>
<form>
<input type="text" value="un texto cualquiera con números 12 3 e incluso con caracteres especiales ?¿ no @importa" id="texto" />
<textarea id="resultado" /></textarea>
<input type="button" value="Traer Formulario" onclick="alternar(document.getElementById('texto'), document.getElementById('resultado'))" />
</form>
</body>
</html>
Suerte