array multidimensional en javascript

raid

Hola a todos:

Estoy intentando crear una estructura a partir de otra que viene de una forma que no me acaba de gustar. Para no entrar en detalles, me voy a quedar justo con el problema que tengo y que no acabo de saber resolver.

He construido una estructura tipo:

[
invierno: Object { nombre: "turronada", precio: 50 },
verano: Object { nombre: "fiesta playera", precio: 100 }
]

y mi código de ejemplo es:

	var eventos= new Array();
	eventos["verano"]={nombre:"fiesta playera",precio:100};
	eventos["invierno"]={nombre:"turronada",precio:50};

Hasta aquí bien: pero ocurre que en este punto, me interesa añadir más eventos, algunos en invierno, por ejemplo, otros en primavera, etc:

eventos["invierno"]={nombre:"concierto",precio:150}

Esto no es solución, porque me sobreescribiria el contenido anterior, pero sin embargo, si quiero hacer un push de este tipo, no me funciona:

eventos["invierno"].push({nombre:"concierto",precio:150});

Mi objetivo es que la estructura pueda ser de esta forma:

[
invierno: [Object { nombre: "turronada", precio: 50 },Object { nombre: "turronada", precio: 50 }],
verano: Object { nombre: "fiesta playera", precio: 100 }
]

No sé si me explico. Quiero poder insertar más eventos en invierno y que así el array acabe siendo un array de arrays. Pero a la vez que se puedan ir insertando también otras epocas (primavera, otoño, etc)

Espero haberme podido explicar bien, y a ver si alguien me lo puede aclarar un poco.

Gracias.

isvidal

var eventos= new Array();
eventos["verano"]={nombre:"fiesta playera",precio:100};
eventos["invierno"]={nombre:"turronada",precio:50};

Ahi estas guardando un objeto, y no un array de objetos, para poder hacer push tienes que guardar como array simplemente añade [ ] tal que :

eventos["verano"] = [ {nombre:"fiesta playera",precio:100} ]

Luego podras hacer

eventos["verano"].push({nombre : "pepito", precio : "2500"})

1 1 respuesta
raid

Perfecto!!!!

Muchas gracias. no sabes las vueltas que le estaba dando, y el caso es que a la hora de exponerlo, yo mismo también he tenido mis dudas en plan.. un momento... algo no me cuadra.

#2 Lo dicho. muchas gracias.

1
B

varuk

¿A los arrays de dos dimensiones ya no se les llama matrices?

2 respuestas
raid

#5 Sí, se les llama matrices, pero también array multidimensional no?

Así los arrays multidimensionales pueden ser de 2, 3, ..., n dimensiones.

1
Fyn4r

#5 Pues espero que no xD

JuAn4k4

Por qué usas corchetes y comillas ?

eventos.verano = []
1 respuesta
raid

#8 Tiene que ser así porque el nombre del evento "verano" lo leo de un fichero. En ese fichero se repiten distintos eventos:

"verano" "abril" "invierno" etc etc.

1 respuesta
JuAn4k4

#9 Siempre puede ser una prop:

events = [{season: "verano", ...}]

summer = events.filter(e => e.season === "verano")

1 respuesta
Nedaim

#10 Se refiere a que lo esta leyendo así: eventos[estacion], o eso entiendo yo. Y así es correcto.

1 respuesta
JuAn4k4

#11 Si, lo he entendido, solo le he dado otra opción que para mí, sería más correcta. ¿Para que los quieres separar por la "temporada" en la que ocurre el evento? Si quiere luego recorrer todos, tendrá que hacer un Object.keys y filtrar las conocidas etc... no se, me parece raro

1 respuesta
raid

#12 Hola Juan4k4

A ver, es un ejemplo hombre.

En el ejemplo real, yo leo de un RSS una informacion en .json. y me viene todo a lo bestia. Entonces uno de los atributos, se repite de vez en cuando, y lo he querido agrupar en una estructura.

para haceros el ejemplo, lo he llamado eventos, y le he puesto nombres de estaciones del año. Pero en el ejemplo real son "lugares". Donde un lugar puede ser: "la plaza del pueblo", o bien "el teatro" o "el bar Pepe".

En lugar de repetir N veces el bar pepe para cada uno de los eventos, he querido agruparlos por: el bar pepe: y a continuación una lista con los eventos de ese bar. Y así sucesivamente con todos los lugares que van a apareciendo en el fichero.

1 respuesta
JuAn4k4

#13 Me sigue pareciendo una prop de cada evento, por mucho que su value se repita. Es solo una opinión vaya.

Los tienes en un groupBy(location), pero igualmente los puedes agrupar de otras formas.

Yo lo metería como prop, y los agruparia después en caso de ser necesario a la hora de presentarlos.

1 respuesta
raid

#14 Buenas.
Yo ya lo tengo resuelto, pero la curisoidad me puede. XD
Me estoy planteando tu idea, la verdad.

A ver si lo entiendo bien. tu me propones ir haciendo push de eventos, y que el "lugar", o sea, el valor que se repite de vez en cuando, pase a ser un atributo más. Es así?

voy leyendo el fichero, y voy creando un array con todo. No?

var eventos = new Array();

y en el bucle de lectura{
    eventos.push({lugar: datolugarleído,  atributo2: dato2leído, atributo 3: dato3leído})
}

Y luego agruparlos con groupBy(campo a agrupar). Es eso?

Entonces el groupBy acabaria creando una estructura agrupada por lugares donde poder obtener de cada lugar los eventos que hay?
Perdona eh? no acabo de entenderlo bien.

1 respuesta
JuAn4k4

#15 eso es, el groupby te devuelve la estructura que intentabas crear, y puedes hacerlo en cualquier momento.

QuitCat

Ninguno de los ejemplos se han puesto son un array multidimensional.
Aunque accedas con corchetes

 eventos["invierno"]

al final tienes un objeto donde cada propiedad es un array.

Usuarios habituales