Foros del Web » Programando para Internet » Javascript »

arrays vs objetos

Estas en el tema de arrays vs objetos en el foro de Javascript en Foros del Web. Necesito ayuda para definir la forma de realizar un script , bien sea con arrays u objetos, no tengo claro si se puede realizar con ...
  #1 (permalink)  
Antiguo 02/04/2010, 10:42
 
Fecha de Ingreso: febrero-2010
Ubicación: Bizkaia
Mensajes: 22
Antigüedad: 14 años, 9 meses
Puntos: 0
arrays vs objetos

Necesito ayuda para definir la forma de realizar un script, bien sea con arrays u objetos, no tengo claro si se puede realizar con estos, llevo varios días peinando la web en busca de alguna información parecida a lo que yo quiero y no lo encuentro por eso recurro a vuestros conocimientos en la materia.

Necesito hacer lo siguiente para un campeonato de liga escolar de futbol (no necesito hacer el fixture ya que los enfrentamientos entre equipos los da la federación).

Un array llamado jornadas que a su vez contenga otro array llamado jornada con los siguientes campos: equipolocal,goleslocal,equipovisitante,golesvisita nte.
jornadas(x) -> jornada(x) -> (equipolocal,goleslocal,equipovisitante,golesvista nte)

Con estos datos luego construyo un array de resultados según jornada.

JORNADA X
posicion (calculado)
equipo (calculado)
num_jornadas (calculado)
ganados_casa (calculado)
empatados_casa (calculado)
perdidos_casa (calculado)
ganados_fuera (calculado)
empatados_fuera (calculado)
perdidos_fuera (calculado)
goles_favor (calculado)
goles_contra (calculado)
puntos (calculado)
diferencia (calculado)

No se si me he explicado bien, quizas hay una forma mejor de plantearlo, he requetebuscado y no he encontrado nada, con estos datos luego puedo hacer tablas por jornada de resultados, consultar anteriores y estadisticas.

Por ejemplo para introducir los datos de una jornada:
idjornada (esto seria un array)
equipos casa("equipo1","equipo3","equipo6");
equiposfuera("equipo2","equipo4","equipo5");
golescasa(10,3,4);
golesfuera(2,0,4);

Gracias de antemano y espero que alguien me resuelva el tema,un saludo.
  #2 (permalink)  
Antiguo 02/04/2010, 11:42
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: arrays vs objetos

Bueno, hay varias maneras de hacerlo. Quizá lo podrías hacer así:
Código PHP:
<script>
var 
jornadas={
              
"2010-05-01":[{'equipolocal':"algo",'goleslocal':2,'equipovisitante':"otro",'golesvisitante':5},
                             {
'equipolocal':"algo1",'goleslocal':2,'equipovisitante':"otro1",'golesvisitante':5},
                             {
'equipolocal':"algo2",'goleslocal':2,'equipovisitante':"otro2",'golesvisitante':5}
                             ],
              
"2010-05-02":[{'equipolocal':"algo4",'goleslocal':2,'equipovisitante':"otro3",'golesvisitante':5},
                             {
'equipolocal':"algo2",'goleslocal':22,'equipovisitante':"otro2",'golesvisitante':5},
                             {
'equipolocal':"algo1",'goleslocal':2,'equipovisitante':"otro1",'golesvisitante':5}
                             ],
              
"2010-05-03":[{'equipolocal':"algo1",'goleslocal':2,'equipovisitante':"otro1",'golesvisitante':5},
                             {
'equipolocal':"algo6",'goleslocal':2,'equipovisitante':"otro2",'golesvisitante':5},
                             {
'equipolocal':"algo3",'goleslocal':2,'equipovisitante':"otro3",'golesvisitante':5}
                             ]
              
}
//set
jornadas['2010-06-05']=jornadas['2010-06-05'] || [];
jornadas['2010-06-05'].push({'equipolocal':"nuevo",'goleslocal':1,'equipovisitante':"re-nueevo",'golesvisitante':1});
//get
alert(jornadas["2010-05-01"][0].equipolocal);
alert(jornadas["2010-05-02"][1].goleslocal);
alert(jornadas["2010-06-05"][0].equipovisitante);
function 
resultado(enfrentamiento){
        var 
res=enfrentamiento.goleslocal-enfrentamiento.golesvisitante;
        if(
res>0){
            
alert(enfrentamiento.equipovisitante+' le ganó a '+enfrentamiento.equipolocal);    
        }else if(
res<0){
            
alert(enfrentamiento.equipovisitante+' perdió frente a '+enfrentamiento.equipolocal);
        }else{
            
alert(enfrentamiento.equipovisitante+' y '+enfrentamiento.equipolocal+' empataron');
        }
}
resultado(jornadas["2010-06-05"][0]);
resultado(jornadas["2010-05-02"][1]);
resultado(jornadas["2010-05-02"][2]);

</script> 

Última edición por Panino5001; 02/04/2010 a las 11:59
  #3 (permalink)  
Antiguo 03/04/2010, 06:49
 
Fecha de Ingreso: febrero-2010
Ubicación: Bizkaia
Mensajes: 22
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: arrays vs objetos

Muchas gracias por contestar Panino5001.
¿Este modo de hacerlo es JSON, no?, he leído algo y parece ser mejor que el clásico new array, al ser un objeto, ahora estoy intentando acostumbrarme a esta notación, me hago un lio y quiero cambiar el id fecha por numeración, osea 1J, 2J, 3J, (jornadas) porque se da el caso de que algunas veces se puede suspender un partido y cambiar la fecha, en cambio el número de jornada es inalterable.

He leído también que se puede asignar los valores a los campos mediante '2010-05-01'[0].equipolocal : "algo", quizás sea menos lioso para mí hacerlo de esta forma.

No entiendo esta linea:
jornadas['2010-06-05']=jornadas['2010-06-05'] || [];
¿para que sirve? ¿podría hacer una función para insertar valores que fuese un método del objeto jornadas?, si es posible ¿como se haría?

Un saludo.
  #4 (permalink)  
Antiguo 03/04/2010, 07:09
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: arrays vs objetos

Cita:
Iniciado por gorani Ver Mensaje
No entiendo esta linea:
jornadas['2010-06-05']=jornadas['2010-06-05'] || [];
¿para que sirve? ¿podría hacer una función para insertar valores que fuese un método del objeto jornadas?, si es posible ¿como se haría?

Un saludo.
La línea a que haces referencia es una manera reducida de decir: si no existe el array jornadas['2010-06-05'], lo creamos vacío. La lógica es la siguiente:
Código PHP:
alert(undefined || 'pepe');//pepe
alert(false || 'pepe');//pepe
alert('juan' || 'pepe');//juan 
Como ves, si el primer elemento es indefinido o falso, se asigna el segundo, si no, el primero.
Con respecto al método, te conviene dejar a jornadas sólo para datos (Modelo)
y crear otro objeto diferente para manejar la lógica (Controlador). Porque en algún momento es posible que quieras recorrer con un bucle todo el objeto jornadas para obtener, por ejemplo, los goles de visitante de un equipo, y si tenés mezclados los datos con la ffuncionalidad será más engorroso.
  #5 (permalink)  
Antiguo 05/04/2010, 11:12
 
Fecha de Ingreso: febrero-2010
Ubicación: Bizkaia
Mensajes: 22
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: arrays vs objetos

Muchas gracias Panino5001, tus explicaciones me han sido de mucha utlidad, he modificado un poco el código para adaptarlo a mis necesisades y tengo casi acabado el proyecto, también me ha sido de utilidad el descubrir el JSON editor que ayuda a localizar errores al crear objetos JSON, cosa muy fácil, una coma que te olvides y te puedes volver loco para localizar el error, no sabes si el error está en el objeto, en una función etc, muy bueno el editor.

He logrado con la creación de dos objetos obtener la tabla de resultados en el segundo objeto, el problema que tengo es para ordenar los equipos por puesto, me explico:

He creado el siguiente objeto:

var equipos = [
{ 'equipo':"Equipo1",'jugados':0,'localG':0,'localE' :0,'localP':0,'visitG':0,
'visitE':0,'visitP':0,'favorG':0,'contraG':0,'punt os':0,'difer':0 },............................

asi sucesivamente inicializo el objeto equipos con todos los equipos que participan en la competición.

Por otro lado he creado el objeto jornadas que es donde introduzco los datos semanalmente:

var jornadas = {
"1J" :[
{'fecha':"31-10-2009"},
{'loc':"Equipo1", 'gloc':10, 'vis':"Equipo3", 'gvis': 4}, {'loc':"Equipo7", 'gloc': 4, 'vis':"Equipo5", 'gvis': 3}, {'loc':"Equipo2", 'gloc': 2, 'vis':"Equipo6", 'gvis': 8},
{'loc':"Equipo0", 'gloc': 3, 'vis':"Equipo4", 'gvis': 0}],............................................

Cada jornada apunto los datos de la competición, luego he creado una función que se encarga de localizar al equipo en el objeto equipos y asignarle sus datos, funciona de maravilla, como he puesto numeración en el nombre de la jornada "1J" "2J" etc puedo iterarlas y obtener losa datos de la jornada 1 a jornada X simplemente con una llamada a la función sumajornadas(18) por ejemplo, lo cual me interesa para crear en el post semanal del blog una tabla de clasificación por jornadas.

El problema que tengo es que los datos salen ordenados como en el objeto equipos, lógico, he buscado por internet funciones de ordenación pero ninguna cumple con los requisitos que a mi me hace falta, to tengo la siguiente salida de datos:

POS EQUIPO JORN GL EL PL GV EV PV GFAVOR GCONTRA PUNTOS DIFERENCIA
1 Equipo1 16 8 0 0 7 0 1 109 38 45 71
2 Equipo2 16 4 0 4 2 0 6 57 71 18 -14
3 Equipo3 16 7 0 1 5 0 3 96 42 36 54 ........

El problema como se puede apreciar es que están desordenados, necesito construir una función que pasándole el objeto equipos me lo odene en función de varios criterios que da la federación vizcaina de fútbol.

1º Por diferencia de puntos
2º Si hay empate de puntos mayor diferencia de goles entre ¿? equipos (esto lo veo muy complicado ya que yo no tengo una referencia ahora mismo para conocer estos datos)
3º Más goles a favor en la general
Quizá podría pasar por alto el segundo punto debido a su complejidad, debería de tener en el objeto una referencia de en que jornada han jugado esos equipos y el resultado y no tengo el objeto preparado para ello.

Si me podeís ayudar estaré muy agradecido, ya se que el post es muy extenso pero pienso que si no conoceís los detalles es muy difícil hacerte a la idea.

Por otro lado me interesaría saber que es más correcto, rellenar los objetos en el blog (blogger), o cargarlos desde por ejemplo GoogleDocs, yo actualmente utilizo el último sistema para cargar URL's de mapas de campos que asigno a la hora de crear las tablas de horarios con enlace a GoogleMaps y me funciona estupendamente, lo cargo como .js con los datos y las funciones, el problema puede surgir si se cae el servidor, supongo.....

Un saludo.

Etiquetas: arrays, objetos
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 19:54.