Foros del Web » Programando para Internet » Javascript »

array multidimensional

Estas en el tema de array multidimensional en el foro de Javascript en Foros del Web. Hola. Estoy intentando guardar datos en un array de dos dimensiones y no lo consigo, seguro que porque hay algo que hago mal. La idea ...
  #1 (permalink)  
Antiguo 21/09/2005, 12:56
 
Fecha de Ingreso: agosto-2005
Mensajes: 18
Antigüedad: 18 años, 8 meses
Puntos: 0
array multidimensional

Hola. Estoy intentando guardar datos en un array de dos dimensiones y no lo consigo, seguro que porque hay algo que hago mal.

La idea es guardar en un array llamado por ejemplo todosPeriodos , los 3 valores de cada uno de los periodos que se me pueden ir dando y que he ido metiendo en el array periodo.

Os pongo a continuación un ejemplo de como lo hago y podréis comprobar que no funciona.

Mi idea es que cada vez que cambio los valores del array periodo, aumento en uno el contador que he declarado para pasar los indices al array todosPeriodos , y le paso los valores que en ese momento tiene el array peridodo.

El problema es que siempre me guarda los mismos valores (los últimos asignados al array periodo) en todos los elementos del array todosPeriodos .

Cita:
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<script language="JavaScript" type="text/JavaScript">
var periodo = new Array(3)
var todosPeriodos = new Array()
var fecIni = 5
var fecFin = 7
var importe = 9
var p =0

function aumentar(){
periodo[0] = fecIni
periodo[1] = fecFin
periodo[2] = importe
alert("periodo[0] " + periodo[0] + "\nperiodo[1] " + periodo[1] +"\nperiodo[2] " + periodo[2])

todosPeriodos[p]=periodo
p++
fecIni++
fecFin++
importe++
alert("periodo[0] " + periodo[0] + "\nperiodo[1] " + periodo[1] +"\nperiodo[2] " + periodo[2] +"\ntodosPeriodos[0][0] " + todosPeriodos[0][0])
}

function ver(){
alert("\ntodosPeriodos[0][0] " + todosPeriodos[0][0])
}

</script>
<input type="button" name="Submit" value="aumentar" onClick="aumentar()">
<input type="button" name="Submit" value="ver" onClick="ver()">
</body>
</html>
  #2 (permalink)  
Antiguo 21/09/2005, 13:25
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
Hola, geofonte
La declaración de variable periodo la esta tomando como local a la función, por eso siempre toma el mismo valor.
Repite la declaración fuera de la función, de esa manera las tomará como variables globales:
Código PHP:
var periodo = new Array(3)
var 
todosPeriodos = new Array()
var 
fecIni 5
var fecFin 7
var importe 9
var =0
periodo
[0] = fecIni
periodo
[1] = fecFin
periodo
[2] = importe

function aumentar(){
periodo[0] = fecIni
periodo
[1] = fecFin
periodo
[2] = importe
alert
("periodo[0] " periodo[0] + "\nperiodo[1] " periodo[1] +"\nperiodo[2] " periodo[2]) 
etc.
__________________
Angel :cool:
  #3 (permalink)  
Antiguo 22/09/2005, 15:19
 
Fecha de Ingreso: agosto-2005
Mensajes: 18
Antigüedad: 18 años, 8 meses
Puntos: 0
Gracias angsanchez, pero no me funciona.

En mi código sí que tenía hecha la declaración de variable periodo fuera de la función, como podrás comprobar en el ejemplo. No obstante, siguiendo tu indicación, he asignado valores a la matriz fuera de la función, pero sigue asignando los valores del último periodo, a todas las variables arrrays (periodo) que ya había ido metiendo en la variable multidimensional todosPeriodos.

La verdad es que me está comiendo mucho la cabeza, ya que no consigo entender por qué, si todosPeriodos[0][0] ya tiene un valor (el que tenía la matriz periodo cuando se la paso) conforme voy metiendo valores a todosPeriodos me cambia todos los anteriores y los iguala al último que le paso.
  #4 (permalink)  
Antiguo 22/09/2005, 15:53
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
Pues es verdad, no funciona; ayer me debí liar y creí que lo hacía. A ver si se me ocurre algo.
__________________
Angel :cool:
  #5 (permalink)  
Antiguo 22/09/2005, 15:59
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
No sé si necesitas para algo la variable periodo[], pero tal como tienes la función se puede hacer de este otro modo, y --no sé por qué-- funciona bien:
function aumentar(){
todosPeriodos[p]=[fecIni,fecFin,importe]

(te ahorras la variable periodo)
__________________
Angel :cool:
  #6 (permalink)  
Antiguo 23/09/2005, 11:43
 
Fecha de Ingreso: agosto-2005
Mensajes: 18
Antigüedad: 18 años, 8 meses
Puntos: 0
Hola angsanchez.

La verdad es que tal como tu planteas la solución, no necesito para nada dos variables, pero es que yo no había visto por ningún sitio (te habrás dado cuenta que soy novato) que en cada posición de un array se pudiese meter más de un valor. Si eso es lo que se puede hacer y es lo que tu me estás sugiriendo, entonces no entiendo por qué en los manuales que he leído pone que para declarar una matriz multidimensional es necesario crear una matriz y luego otra a la que se le va añadiendo en cada posición la primera matriz. ¿no es un array bidimensional el que hemos creado con tu propuesta? Evidentemente sí que los es, ya que incluso he comprobado, que para recorrer los valores del array, sólo tengo que poner los dos índices.

Saludos y nuevamente gracias.
  #7 (permalink)  
Antiguo 23/09/2005, 12:56
 
Fecha de Ingreso: octubre-2004
Ubicación: España
Mensajes: 894
Antigüedad: 19 años, 6 meses
Puntos: 3
Sí, efectivamente es una matriz bidimensional. La asignación con corchetes es una forma abreviada, pero lo que subyace no cambia

todosPeriodos[p]=[fecIni,fecFin,importe]

es lo mismo que

todosPeriodos[p][0]=fecIni
todosPeriodos[p][1]=fecFin
todosPeriodos[p][2]=importe
__________________
Angel :cool:
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 22:32.