Foros del Web » Programando para Internet » Javascript »

Problema con listas

Estas en el tema de Problema con listas en el foro de Javascript en Foros del Web. <script> nombre=new Array(); Nombres=["Juan", "Rosa","Antonio","Ana","Pedro"]; Telefonos=[948312707,948300585, 948401595, 948400595, 948410595]; var i; var x; for(i=0;i<5;i++) { nombre[i]=prompt("introduce un nombre:"); for(x=0;x<5;x++) { if(nombre[i]==Nombres[x]) { document.write("El telefono de ...
  #1 (permalink)  
Antiguo 02/10/2013, 10:21
 
Fecha de Ingreso: noviembre-2011
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 0
Problema con listas

<script>
nombre=new Array();

Nombres=["Juan", "Rosa","Antonio","Ana","Pedro"];

Telefonos=[948312707,948300585, 948401595, 948400595, 948410595];
var i;
var x;


for(i=0;i<5;i++)
{
nombre[i]=prompt("introduce un nombre:");

for(x=0;x<5;x++)
{


if(nombre[i]==Nombres[x])

{
document.write("El telefono de " + nombre[i] + " es: " + Telefonos[x]+"<br>");

}




}


}
document.write("Fin de la base de datos"+"<br>");

</script>

Quiero hacer un script,que cuando el nombre intrducido por teclado y no coincida con alguno de la matriz,me muestre teléfono no encontrado,pero solo una vez,no mil veces.
Gracias.
Si escribo "caca",me muestre por pantalla un mensaje diciendo que "caca" no tiene teléfono.: stress:
  #2 (permalink)  
Antiguo 02/10/2013, 11:05
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Importante,please:

Entiendo que el problema sea importante para ti, pero ese título no describe para nada el problema, y si alguien tuviera un problema similar y buscara el tema, no lo encontraría.

Suponiendo que realmente quieres preguntar 5 veces con el prompt, creo que debería quedar algo así:



Código Javascript:
Ver original
  1. for(i=0;i<5;i++){
  2.     nombre=prompt("introduce un nombre:");
  3.     var bandera=false;
  4.     for(x=0;x<5;x++){
  5.          if(nombre==Nombres[x]){
  6.               bandera=true;
  7.          }
  8.     }
  9.     if(bandera)
  10.          document.write("El telefono de " + nombre + " es: " + Telefonos[x]+"<br>");
  11.     else
  12.          alert('El nombre '+nombre+' no tiene telefono');
  13. }
  #3 (permalink)  
Antiguo 02/10/2013, 11:29
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: Importante,please:

Otro modo, sin perder el teléfono.
Código Javascript:
Ver original
  1. for ( i = 0; i < 5; i++) {
  2.       nombre[i] = prompt("introduce un nombre:");
  3.       var num = Nombres.indexOf(nombre[i]);
  4.  
  5.       if (Nombres.indexOf(nombre[i]) !== -1) {
  6.          document.write("El telefono de " + nombre[i] + " es: " + Telefonos[num + 1] + "<br>");
  7.       } else {
  8.          document.write("No hay telefono de " + nombre[i] + "<br>");
  9.       }
  10.    }
  11.    document.write("Fin de la base de datos" + "<br>");
  #4 (permalink)  
Antiguo 02/10/2013, 11:57
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Importante,please:

¿Sin perder el teléfono? ¿en qué momento lo "guardas"?

Lo que entendí es que tienes dos listas, una de nombres y una de teléfono y que se corresponden en el índice (el nombre 0 tiene el teléfono 0 etc)

Y que preguntas por prompt un nombre y buscas si existe y por tanto si tiene asociado un teléfono.

No entiendo para qué almacenar los nombres preguntados en nombre[i] ya que no describes más el problema.
  #5 (permalink)  
Antiguo 02/10/2013, 12:29
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 8 meses
Puntos: 578
Respuesta: Importante,please:

Fin de la Base de Datos xDDDD

Lo de indexOf()===-1 es curioso porque actúa como un contents()

Última edición por PHPeros; 02/10/2013 a las 12:36
  #6 (permalink)  
Antiguo 02/10/2013, 13:36
 
Fecha de Ingreso: noviembre-2011
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Importante,please:

Gracias.Voy a probar vuestras soluciones.
Lo que intento hacer es lo que he dicho.
Si no existe un nombre introducido por teclado en el array nombres,que se muestre en esa posición,no existe teléfono de ese nombre.
Perdonar si no me explico bien.

<script>
nombre=new Array();

Nombres=["Juan", "Rosa","Antonio","Ana","Pedro"];

Telefonos=[948312707,948300585, 948401595, 948400595, 948410595];
var i;
var x;


for(i=0;i<5;i++)
{
nombre[i]=prompt("introduce un nombre:");

for(x=0;x<5;x++)
{


if(nombre[i]==Nombres[x])

{
document.write("El telefono de " + nombre[i] + " es: " + Telefonos[x]+"<br>");

}

else{


document.write("El telefono de " + nombre[i] + " no exite:"+"<br>");
}




}


}
document.write("Fin de la base de datos"+"<br>");

</script>

Lo que pasa si se va al else ,el mensaje aparece mil veces y solo quiero que aprezca una y es culpa del for (x=0;x<5;x++) e intento sacarlo de este bucle pero no lo consigo hacer funcionar.


GRACIASSSSSS
  #7 (permalink)  
Antiguo 02/10/2013, 14:25
 
Fecha de Ingreso: noviembre-2011
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: Importante,please:

Gracias.Si el valor de indexof es -1,me lo tengo que creer e indica que el nombre está fuera de los limites del array y no existe en este,osea ese nombre no esta en el array,no se ha encontrado en el array.
Entonces no existe teléfono de ese nombre introducido.
Además,
¿No habría que quitar +1 del Teléfonos[num+1]?
ASI....
<script>
nombre=new Array();

Nombres=["Juan", "Rosa","Antonio","Ana","Pedro"];

Telefonos=[948312707,, 948401595, 948400595, 948410595];
var i;
var x;
document.write("TelefonoS de: " + "<br>");
for ( i = 0; i < 5; i++)
{
document.write(Nombres[i] + "<br>");

}

for ( i = 0; i < 5; i++) {
nombre[i] = prompt("introduce un nombre:");
/*indexOf devuelve la posicion(0,1,2,3,....)de la cadena que se encuentra en el array.Sino se encuentra la función devuelve-1*/
var num = Nombres.indexOf(nombre[i]);
document.write(num);
if (Nombres.indexOf(nombre[i]) !== -1) {
document.write("El telefono de " + nombre[i] + " es: " + Telefonos[num] + "<br>");
} else {
document.write("No hay telefono de " + nombre[i] + "<br>");
}
}
document.write("Fin de la base de datos" + "<br>");

</script>
  #8 (permalink)  
Antiguo 02/10/2013, 14:53
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 10 años, 8 meses
Puntos: 29
Respuesta: Importante,please:

array.indexOf('valor'); devuelve el número de índice del valor si este existe en el array, sino indica -1. Siendo -1 un valor fijo ante un error ya tienes algo de dónde agarrarte.

Prueba:
Código Javascript:
Ver original
  1. var prueba = Nombres.indexOf('el_nombre');
  2. alert(prueba);

Telefonos[num+1] es un error mío, no lo quité al limpiar el script.
Por tanto es correcto: Telefonos[num]
  #9 (permalink)  
Antiguo 02/10/2013, 17:08
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Importante,please:

Cita:
Lo que pasa si se va al else ,el mensaje aparece mil veces y solo quiero que aprezca una y es culpa del for (x=0;x<5;x++) e intento sacarlo de este bucle pero no lo consigo hacer funcionar.
Por un lado, sigues sin explicar la necesidad o el porqué guardas en un arreglo los nombres pedidos en el prompt. Por otro lado, en el ejemplo que te indiqué te muestro cómo indicar que no hay teléfono para el nombre sin que haya que repetir nada.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:52.