image
Inicio » Foros » JavaScript

JavaScript

Ordenar un array de nombres

Volver al foro | Responder | Añadir nuevo tema


De: Wanderer
Fecha: 07/11/2005
Mensaje:

Holas,

Necesito ordenar una matiz de nombres que introduce el usuario. El problema es que no consigo saber cómo:

-hacer que salga del bucle al pulsar cancelar y muestre los nombres introducidos.
-que el array sea infinito, indeterminado (no limitado a 4 nombres).
-que se compruebe que se ha introducido al menos un nombre y comprobar que no se utilizan números.

Este es el código que utilizo. ¿Qué me faltaría?

<html>
<head><title>Ordenar nombres</title></head>
<body>
<script language="javascript">

var nombres = new Array (4);

for ( i = 0; i<4; i++)
{
nombres[i] = prompt("Introduce el nombre " + i, "");
}

{
document.write("Los nombres introducidos son: " +nombres + ", " +"<br>");
document.write("Los nombres ordenados son: " +nombres.sort() + ", ");
}
</script>
</body>
</html>


Quizás le interese
De: jbosch(vosk)
Util para: 2 personas

Fecha: 07/11/2005
Mensaje:

tienes que usar un array no limitado 'var a=new Array;'. luego el bucle puede ser un 'for' infinito (por ejemplo 'for(var q=0;q<1;q--)' que lo vas a finalizar con 'q=2;' -cuidado con este tipo de bucles-), o puede ser un 'while' que lo vas a controlar de forma parecida. en este caso creo que será mejor usar el 'while', y se controlará de forma que cuando el elemento del array sea nulo ('null') finalice el bucle; antes que el bucle tienes que usar un primer 'tanteo' para que luego el bucle funcione por si solo, que consiste en solicitar el primer nombre; después de esto ya se puede iniciar el bucle, que será de la forma 'while(nombres[i]!=null) {}', es decir que si al prompt previo al bucle selecciona 'cancelar' el elemento 'i(=0)' será 'null' por lo que ya no continua el bucle, dentro del bucle tienes que incrementar la 'i' para que no sobreescriva y ejecutas un nuevo prompt. este es un ejemplo:

<html><body>
<script language="javascript">
var nombres=new Array;
var i=0;
nombres[i]=prompt("Introduce el nombre "+i,"");
while(nombres[i]!=null)
 {
 i++;
 nombres[i]=prompt("Introduce el nombre "+i,"");
 }
if(nombres.length<=1) {document.write("Sin lista de nombres.");}
else
 {
 A("Lista nombres",nombres,false);
 A("Lista ordenada",nombres,true);
 }

function A(t,n,o)
{
document.write("<u>"+t+":</u> ");
var na=new Array(n.length-1);
for(var q=0;q<n.length-1;q++) {na[q]=n[q];}
if(o) {na.sort();}
for(var q=0;q<na.length;q++)
 {
 if(q>0) {document.write(",");}
 document.write(na[q]);
 }
document.write(".<br>");
}
</script></body></html>

no es conveniente listar directamente el array tal como haces en el ejemplo, sino que siempre es preferible recorrerlo para tener un control sobre lo que se está haciendo. he puesto la funcion 'A()' solo para completar el ejemplo, ya que si no quieres recorrer el array puedes usar las dos ultimas lineas de tu codigo (no es necesario cerrarlas en '{}').

la funcion lleva tres parametros: un texto a mostrar, el array de nombres y un boleano que indica si se va a ordenar o no.

creo que aún queda un punto por resolver: que courre cuando el usuario entra un nombre vacío (acepta el prompt sin entrar texto)? el valor del elemento no es nulo, simplemente es una cadena vacía. luego puedes resolverlo de varias formas; la mas evidente es crear otro 'while' dentro del bucle principal para que solicite un nombre mientras el elemento actual sea una cadena vacía, observa que tambien tendras que hacer esta comprovacion antes de entrar en el bucle principal (para el primer elemento); luego la cosa quedará tal como:

nombres[i]=prompt("Introduce el nombre "+i,"");
while(nombres[i]!=null && nombres[i].length<=0) {nombres[i]=prompt("¡No has introducido el nombre "+i+"!","");}
while(nombres[i]!=null)
 {
 i++;
 nombres[i]=prompt("Introduce el nombre "+i,"");
 while(nombres[i]!=null && nombres[i].length<=0)
  {
  nombres[i]=prompt("¡No has introducido el nombre "+i+"!","");
  }
 }

hay mas formas de solucionarlo; tal vez la mas útil para el usuario es la de asociar una cadena vacía a un valor nulo (te ahorras el tener que saltar de un boton a otro, parece que no pero es mas cómodo); para ello debes comprobar que el elemento actual no sea nulo pero la cadena sea vacía, entonces asignas 'null' al elemento actual. debes comprobarlo tambien para el elemento 0 (antes del bucle), por lo que si al primer prompt aceptas una cadena vacía, compruebas que no es nula pero está vacía, la igualas al elemento nulo, el bucle verifica que la cadena actual es nula y ya no sigue. no cuelgo el ejemplo de este último, pero en todo caso lo puedes hacer como ejercicio.

jbosch(vosk)





De: Wanderer
Util para: 0 personas

Fecha: 08/11/2005
Mensaje:

¡Muchísimas gracias!



Volver al foro | Responder | Añadir nuevo tema

Quizás le interese:

WebEstilo.com no se hace responsable de las opiniones que los usuarios puedan verter en cualquiera de los foros existentes.

Si te solucionó el problema pulsa en G+1


Gracias!






Comparte



Última modificación:05 de Agosto de 2012. Spain - España.
© 1998-2004 por . Todos los derechos reservados.