Foros del Web » Programando para Internet » Javascript »

Array u Objeto

Estas en el tema de Array u Objeto en el foro de Javascript en Foros del Web. Hola, tengo un problema hace unas semanas, estoy haciendo un chat y lo que necesito es, cuando se conecta un usuario, guardar: 1) Su id ...
  #1 (permalink)  
Antiguo 10/01/2014, 13:16
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Array u Objeto

Hola, tengo un problema hace unas semanas, estoy haciendo un chat y lo que necesito es, cuando se conecta un usuario, guardar:

1) Su id que obtengo de BD (para verificar que no este ya conectado)
2) Su nombre (para poder armar la lista de usuarios conectados)
3) Su id.socket (para desconectarlo de la hubicacion anterior en caso de estar conectado)

El problema es que si utilizo:

Array: tendria que ser del tipo multidimencional en donde el primer nivel serian los id y cada id deberia contener nombre y socket, no estoy muy seguro de como realizarlo, en los intentos que hice me dejaba de funcionar el indexOF que es fundamental para el punto 1)

Objetos: nose como ir agregandole nuevos elementos a medida que se van sumando nuevos usuarios, yo hago:

Código HTML:
usuariosConectados={
                                            'id':rows[0].id,
                                            'nombre': rows[0].display_name,
                                            'socket': socket.id,                                            
                                        };
y en lugar de agregarce se reemplaza el valor anterior...

Espero de verdad me puedan ayudar porqyue estoy girando en circulos hace dias!. Muchisimas gracias!!!
  #2 (permalink)  
Antiguo 10/01/2014, 14:24
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Array u Objeto

Usar objetos es más cómodo, pero no hay que olvidar que es posible tener un array de objetos.
var objeto=[];
objeto.push({'id':2,'nombre':'juan','socket':5});
objeto.push({'id':3,'nombre':'pedro','socket':6});

para recuperar un valor es simple, por ejemplo para el id de pedro;

var id=objeto[1].id;

Claro que es posible hacer objetos de objetos y otras cosas

var objeto={};
objeto['juan']={'id':2,'socket':5}

o bien puedes usar el id como índice de un array etc.
  #3 (permalink)  
Antiguo 10/01/2014, 17:45
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Array u Objeto

Hola ocp001a mil gracias por tu ayuda!!, te comento que estoy utilizando el array de objetos como me sugeriste, en la validacion para saber si el usuario que esta ingresando ya esta conectado hago un bucle for de la siguiente manera:

Código HTML:
bandera=-1;
                for(i=0; i <= usuariosConectados.length; i++) {
                   if(usuariosConectados[i].id == rows[0].id) {
                     bandera=i;
                   }
                }
y me arroja el siguiente error:

Cannot read property 'id' of undefined

me imagino que este error es porque el array aun esta vacio... que me recomiendas que haga?. Gracias!!!
  #4 (permalink)  
Antiguo 10/01/2014, 18:07
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Array u Objeto

Cita:
Iniciado por ocp001a Ver Mensaje
Usar objetos es más cómodo, pero no hay que olvidar que es posible tener un array de objetos.
var objeto=[];
objeto.push({'id':2,'nombre':'juan','socket':5});
objeto.push({'id':3,'nombre':'pedro','socket':6});

para recuperar un valor es simple, por ejemplo para el id de pedro;

var id=objeto[1].id;

Claro que es posible hacer objetos de objetos y otras cosas

var objeto={};
objeto['juan']={'id':2,'socket':5}

o bien puedes usar el id como índice de un array etc.
Te paso todo el codigo quizas el error esta en otro lado.... Nuevamente mil gracias!!!

Código HTML:
bandera=-1;
                    for(i=0; i <= usuariosConectados.length; i++) {
                       if(usuariosConectados[i].id == rows[0].id) {
                         bandera=i;
                       }
                    }
                
                //revisamos si este usuario ya esta conectado
                if(bandera == -1)
                {
                    usuariosConectados.push({
                                            'id':rows[0].id,
                                            'nombre': rows[0].display_name,
                                            'socket': socket.id,                                            
                                            });
                    
                    usuario=[rows[0].id,rows[0].display_name];                			
        			socket.broadcast.emit("conectado",usuario);                    
                    socket.emit("me_conecte",usuariosConectados);                     
                }
                else
                { 
                    io.sockets.socket(usuariosConectados[bandera]['socket']).emit("alerta");
                }
  #5 (permalink)  
Antiguo 10/01/2014, 19:05
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Array u Objeto

Bueno, habría que ver si el id que no existe es del array usuariosConectados o de rows[0] que no sé de donde sale, pero viendo tu ciclo

for(i=0; i <= usuariosConectados.length; i++) {

cuando llegue a la última posición debería fallar, por aquello de que los arreglos inician en la posición cero. Suponiendo que tienes un array con tres datos, estarían en la posición 0, 1 y 2; cuando pides el tamaño del arreglo con .length, éste te devolverá 3, por lo que tu ciclo irá de 0 a 3 posiciones (0,1,2,3) siendo que la posición 3 (para este ejemplo)no existe, por tanto en este for no deberías usar el <=, sólo el <
  #6 (permalink)  
Antiguo 10/01/2014, 20:04
 
Fecha de Ingreso: febrero-2009
Mensajes: 151
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: Array u Objeto

Cita:
Iniciado por ocp001a Ver Mensaje
Bueno, habría que ver si el id que no existe es del array usuariosConectados o de rows[0] que no sé de donde sale, pero viendo tu ciclo

for(i=0; i <= usuariosConectados.length; i++) {

cuando llegue a la última posición debería fallar, por aquello de que los arreglos inician en la posición cero. Suponiendo que tienes un array con tres datos, estarían en la posición 0, 1 y 2; cuando pides el tamaño del arreglo con .length, éste te devolverá 3, por lo que tu ciclo irá de 0 a 3 posiciones (0,1,2,3) siendo que la posición 3 (para este ejemplo)no existe, por tanto en este for no deberías usar el <=, sólo el <
Hola ocp001a, mil gracias de nuevo, te comento que el error ese lo solucione cambiando ese for por un FOR IN...

ahora el problema que tengo es cuando se desconecta un usuario, tengo que borrar el objeto donde guarde todos sus datos, eso como deberia hacerlo??. Ahora son 1 millon de gracias!. jajajja
  #7 (permalink)  
Antiguo 11/01/2014, 17:52
Avatar de hackjose  
Fecha de Ingreso: abril-2010
Ubicación: Edo Mexico
Mensajes: 1.178
Antigüedad: 14 años
Puntos: 131
Respuesta: Array u Objeto

La verdad no se si sea necesario borrar el objeto
Si lo quieres borrar tienes que asignarle null

La documentacion ECMA-262 dice que null representa la ausencia intencional del contenido de un objeto o un objeto vacio ya que su tipo es object

saludos

Etiquetas: funcion, objeto, valor
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 05:44.