Foros del Web » Programando para Internet » Javascript »

Guardar datos en array bidimensional

Estas en el tema de Guardar datos en array bidimensional en el foro de Javascript en Foros del Web. Hola muy buenas a todos y gracias de antemano por interesaros en este tema. Estoy haciendo un ejercicio en el que tengo que crear una ...
  #1 (permalink)  
Antiguo 08/12/2011, 06:10
 
Fecha de Ingreso: diciembre-2011
Mensajes: 4
Antigüedad: 12 años, 11 meses
Puntos: 0
Guardar datos en array bidimensional

Hola muy buenas a todos y gracias de antemano por interesaros en este tema. Estoy haciendo un ejercicio en el que tengo que crear una tabla de forma dinámica pidiendo el número de filas y número de columnas, además tengo que pedir un valor para cada celda a través del prompt. Quiero guardad esos valores en un array bidimensional que quede como en la tabla y lo que hago es a la hora de introducir el valor en la tabla lo introduzco también en el array. El problema viene cuando pido mas de una fila, si pido dos filas y dos columnas, que debería pedir 4 valores, me pide 3 valores y cuando quiero mostrar los valores me muestra 2 además no me muestra la tabla en la página. Si comento la parte en la que guardo el valor en el array no pasa nada de esto.
Por cierto, si uso herramientas para desarrolladores en Google Chrome me sale el error "cannot set property '0' of undefined" justo debajo de la parte en la que guardo el valor en el array.
Espero haberme explicado lo mejor posible y muchas gracias de antemano. Un saludo a todos ;)

Código Javascript:
Ver original
  1. <html>
  2.  
  3.     <head>
  4.         <script style="text/javascript">
  5.         var fila;
  6.         var columna;
  7.         var numero;
  8.         var arrayTabla= new Array(numf);
  9.         var numf; //numero filas
  10.         var numc; //numero columnas
  11.         function generar(){
  12.             //cojo los datos del id que solicito
  13.             fila=document.getElementById('filas');
  14.             //paso el dato a entero
  15.             numf=parseInt(fila.value);
  16.            
  17.             columna=document.getElementById('columnas');
  18.             numc=parseInt(columna.value);
  19.             //creo el array bidimensional para guardar los datos de la tabla tal y como está en ésta
  20.             for (i=0;i<arrayTabla.length;i++) arrayTabla[i]= new Array(numc);
  21.             //creo la tabla
  22.             tabla=document.createElement("table");
  23.             tabla.border=1;
  24.             tabla.id="t";// añado id a la tabla
  25.            
  26.            
  27.             //creamos las celdas de la tabla e introducimos los datos en la celda y en el array bidimensional
  28.             for (var i=0;i<numf;i++){
  29.             //recorremos el array de filas creándolas con tr
  30.                 var fila1=document.createElement("tr");
  31.                 //lo mismo con td
  32.                 for (var j=0;j<numc;j++){
  33.                     //lo mismo con td
  34.                     var columna1=document.createElement("td");//creamos una celda
  35.                     numero=prompt("Intro valor: ");
  36.                     arrayTabla[i][j]=numero; //introduzco el valor en el array
  37.                     //creo un texto para dentro de cada td y le pongo el valor de número
  38.                     var texto=document.createTextNode(numero);
  39.                    
  40.                     columna1.appendChild(texto);//enlazamos hijos con padres
  41.                     fila1.appendChild(columna1);
  42.                 }
  43.                 tabla.appendChild(fila1);
  44.                
  45.             }
  46.             bodyP.appendChild(tabla);
  47.            
  48.         }
  49.    
  50.        
  51.         function mostrar(){ //funcion para mostrar los valores de cada celda
  52.            
  53.             for(i=0;i<arrayTabla.length;i++){
  54.                
  55.                 for (j=0;j<arrayTabla[i].length;j++){
  56.                    
  57.                     alert("valor celda: "+arrayTabla[i][j]);
  58.                    
  59.                 }
  60.             }
  61.         }
  62.        
  63.     </script>
  64.     </head>
  65.     <body id="bodyP">
  66.    
  67.         Filas<input type="text" id="filas" value=""></br>
  68.         Columnas<input type="text" id="columnas" value=""></br>
  69.         <input type="Button" value="generar" onclick="generar()">
  70.        
  71.         <input type="Button" value="mostrar" onclick="mostrar()"> </br>
  72.        
  73.        
  74.     </body>
  #2 (permalink)  
Antiguo 08/12/2011, 11:09
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 6 meses
Puntos: 1485
Respuesta: Guardar datos en array bidimensional

buenas,
presta atención a la línea #8 y #20. en la #8 estas creando un array de longitud numf pero dicha variable esta indefinida. o sea, no tiene valor. por tanto, se crea un array de un solo elemento con valor undefined. luego, en la #20 estas recorriendo el array por su longitud. es decir, el bucle tendrá un solo ciclo. es ahí donde estas fallando.

tienes dos opciones. la línea #8 la puedes ubicar dentro de la función generar pero luego de la línea que convierte numf a número. o bien puedes crear un array vacio y la línea #20 utilizas la variable numf como condición del bucle. es decir i < numf.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 08/12/2011, 15:13
 
Fecha de Ingreso: diciembre-2011
Mensajes: 4
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Guardar datos en array bidimensional

Muchísimas gracias por la respuesta, ya lo he solucionado, la verdad es que es una tontería pero me ha dado dolor de cabeza.
Al final he declarado el array dentro de la función después de ponerle valor a numf, con eso ya ha funcionado perfectamente.
Muchas gracias de nuevo, un saludo

Etiquetas: funcion, html, input, bidimensionales
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 10:06.