Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: C3PO en 13 de Abril 2016, 13:43

Título: JavaScript: cómo ordenar alfabeticamente un Array (arreglo de palabras) CU01153E
Publicado por: C3PO en 13 de Abril 2016, 13:43
Hola. Tras leer las diferentes soluciones (para el ejercicio 2), todas ellas muy ingeniosas, aportadas por mis compañeros en el foro.

Citar
EJERCICIO 2

Crea un script donde sea posible ordenar palabras por orden alfabético sin tener en cuenta la existencia de mayúsculas o minúsculas. Por ejemplo, declarar var miArray=['Moto', 'soto', 'Abaco', 'abeja', 'Sapo', 'nieve', 'Zumba, 'barco'] y tras ordenar obtener =[ 'Abaco', 'abeja', 'barco', 'Moto', 'nieve', 'Sapo', 'soto', 'Zumba].

He decidido intentar hacerlo usando solamente "las herramientas" vistas hasta ahora en el curso. Dejo aquí el código para cualquier comentario que me queráis hacer sobre el mismo. ("Se aprende más de la crítica que de la lisonja")

Código: [Seleccionar]
<!-- EJERCICIO 2-->
<!DOCTYPE html>

<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">

<script type="text/javascript">

function ejemplo() {

var arrayOriginal=['Moto','soto','Abaco','abeja','Sapo','nieve','Zumba','barco'];
var miArray=['Moto','soto','Abaco','abeja','Sapo','nieve','Zumba','barco'];
var arrayPos= new Array();
var arrayOriginalFinal=new Array();

var arrayMinus= miArray.toString();
var arrayMinusDesordenado= miArray.toString();

arrayMinus=arrayMinus.toLowerCase();
arrayMinusDesordenado=arrayMinusDesordenado.toLowerCase();

arrayMinus=arrayMinus.split(",");
arrayMinusDesordenado=arrayMinusDesordenado.split(",");

arrayMinus=arrayMinus.sort();

for (i=0;i<arrayMinus.length;i++){
var pal=arrayMinus[i];
var pos=arrayMinusDesordenado.indexOf(pal);
arrayPos[i]=pos;
}

for (i=0;i<arrayOriginal.length;i++){
arrayOriginalFinal[i]=arrayOriginal[arrayPos[i]];
}

alert('El array ordenado queda así: \n'+arrayOriginalFinal);

}


</script>

</head>

<body><div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3></div>

<div style="color:blue;" id ="pulsador" onclick="ejemplo()"> Probar </div>

</body>
</html>

Un saludo.



Título: Re:JavaScript: cómo ordenar alfabeticamente un Array (arreglo de palabras) CU01153E
Publicado por: César Krall en 19 de Abril 2016, 10:36
Hola! El código funciona bien. Para mantener ordenados los foros es preferible incluir siempre el código de todos los ejercicios de una entrega, en este caso faltaría el código del ejercicio 1 de esta entrega

Estoy contigo: la crítica si es sana ayuda a aprender y mejorar, por eso intentaré hacer una crítica sana ;)

En primer lugar al ver el ejercicio me ha llamado la atención los nombres de variables que utilizas. Me parecen un tanto confusos, y creo que el código mejoraría si les dieras nombres más descriptivos.

Por ejemplo, en lugar de arrayOriginalFinal me parecería más adecuado arrayOrdenado

En casos como este:

Código: [Seleccionar]
var arrayOriginal=['Moto','soto','Abaco','abeja','Sapo','nieve','Zumba','barco'];
var miArray=['Moto','soto','Abaco','abeja','Sapo','nieve','Zumba','barco'];

Estás declarando dos arrays iguales (uno tiene el mismo contenido que otro). Esto en principio debe evitarse, pero si se considera necesario (por ejemplo para poder operar sin perder la ordenación inicial) en lugar de darle dos nombres que hagan que parezcan distintas cosas, veo más razonable ponerle como nombre arrayOriginal y copiaDeArrayOriginal ó duplicadoArrayOriginal. De ese modo queda más claro que se trabaja con una copia o duplicado. Si no se hace así, en un código de cientos de líneas no nos acordaremos de que esos dos arrays eran uno copia del otro inicialmente.

Cuando tengas que hacer una copia o duplicado te recomiendo buscar métodos específicos. Escribir a mano la copia es fuente de errores.

Por ejemplo en el caso anterior puedes usar

var arrayOriginal=['Moto','soto','Abaco','abeja','Sapo','nieve','Zumba','barco'];
var miArray=arrayOriginal.slice(0);

El código en general lo veo bien

Saludos!