Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Pasar de Arrays a Objetos

Estas en el tema de Pasar de Arrays a Objetos en el foro de Javascript en Foros del Web. Hola a todos, Les comento basicamente lo que quiero hacer, lo que puedo hacer y lo que querria hacer. Tengo 2 listas y agrego dinamicamente ...
  #1 (permalink)  
Antiguo 29/01/2013, 21:23
 
Fecha de Ingreso: julio-2010
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 5
Pasar de Arrays a Objetos

Hola a todos,

Les comento basicamente lo que quiero hacer, lo que puedo hacer y lo que querria hacer.

Tengo 2 listas y agrego dinamicamente items en cada lista por medio de 2 textareas. Pero necesito guardarlos de alguna forma ya que despues pienso usar esos datos para otros usos.

Opte primero por arrays multidimencionales, pero aparte queria usar indices asociativos, lo cual me lleve la sorpresa que no existen los mismos en Javascript. Es decir, buscaba algo asi por ejemplo:

Código Javascript:
Ver original
  1. listas['lista1'][0];
  2. listas['lista2'][0];

No lo pude hacer ya que como dije no existen tales tipos de arrays ya que son objetos, entonces al querer usar ciertos metodos con estas "arrays" el resultado es incorrecto.

Para las arrays uso los metodos push() para agregar los items a las listas y splice() para eliminarlos (junto con $.inArray() para obtener su indice). El tema es que cuando tengo que usar objetos no se como hacer este tipo de cosas...

Alguna ayuda? Gracias de antemano.

Saludos.
  #2 (permalink)  
Antiguo 29/01/2013, 21:30
 
Fecha de Ingreso: enero-2013
Mensajes: 87
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Pasar de Arrays a Objetos

no te entiendo muy bien tu pregunta
  #3 (permalink)  
Antiguo 29/01/2013, 21:42
 
Fecha de Ingreso: julio-2010
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: Pasar de Arrays a Objetos

Voy a hacer mas simplificada la pregunta, con un ejemplo... quiero crear algo asi:

Código Javascript:
Ver original
  1. myList = new Object();
  2. myList["list1"] = new Array();
  3. myList["List2"] = new Array();

Ahora, yo desde los dos textareas que tengo quiero ingresar datos dinamicamente a myList, tanto a ["list1"] como a ["list2"] dependiendo desde que textarea ingrese dicho valor.

Actualmente lo hago con arrays normales usando .push(), pero como lo haria usando objetos en este caso?

Supongo que ahora se entiende mejor, aunque solo resumi una parte... pero bueno, vayamos por partes :p
  #4 (permalink)  
Antiguo 29/01/2013, 21:59
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Pasar de Arrays a Objetos

Pues de la misma forma que usas los Arrays

Te dejo un ejemplo de como agrego elementos a los arrays definidos dentro de cada objeto

Código Javascript:
Ver original
  1. myList = new Object();
  2. myList["List1"] = new Array();
  3. myList["List2"] = new Array();
  4.  
  5. myList["List1"][0] = "auto";
  6. myList["List1"][1] = "casa";
  7. myList["List1"][2] = "moto";
  8.  
  9. console.log(myList["List1"][0]); // retorna auto
  10. console.log(myList["List1"][1]); // retorna casa
  11. console.log(myList["List1"][2]); // retorna moto
  12.  
  13.  
  14. myList["List2"][0] = "perro";
  15. myList["List2"][1] = "gato";
  16. myList["List2"][2] = "pajaro";
  17.  
  18. console.log(myList["List2"][0]); // retorna perro
  19. console.log(myList["List2"][1]); // retorna gato
  20. console.log(myList["List2"][2]); // retorna pajaro

Ahora supongamos que queres eliminar el primer elemento del array en List1, usas los mismos metodos que el objeto Array

Código Javascript:
Ver original
  1. myList["List2"].shift(); // eliminamos perro
  2. console.log(myList["List2"][0]); // retorna gato, ahora es el primer elemento

Última edición por ipraetoriux; 29/01/2013 a las 22:06
  #5 (permalink)  
Antiguo 30/01/2013, 06:51
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Pasar de Arrays a Objetos

Gente, eviten usar los constructores 'new Array' y 'new Object', pare eso estan los literales '[]' y '{}'.

Sobre los arrays pueden encontrar más info en este thread: http://www.forosdelweb.com/f13/orden...amente-938802/
__________________
blog | @aijoona
  #6 (permalink)  
Antiguo 30/01/2013, 07:05
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Pasar de Arrays a Objetos

Cita:
Iniciado por Aijoona Ver Mensaje
Gente, eviten usar los constructores 'new Array' y 'new Object', pare eso estan los literales '[]' y '{}'.

Sobre los arrays pueden encontrar más info en este thread: http://www.forosdelweb.com/f13/orden...amente-938802/
Eh?...evitar usar?....es exactamente lo mismo...solo hay una diferencia entre usar la forma explicita new Array() con la literal, luego es exactamente igual, accedes a las propiedades y metodos de la misma forma, y no tienen problemas ni de tiempo de ejecución o performance...no me vas a venir con el cuento que es crear contenedores innesarios como en Java, no?...Usar una u otra forma, esta mas orientado a la forma de escribir código de cada uno, pero en ninguno de los casos esta mal aplicado, o hay que usar uno por encima del otro...

en que te basas para decir que hay que evitar???...afirmando estas cosas así, lo único que logras es confundir a gente que recién empieza con JavaScript...
  #7 (permalink)  
Antiguo 30/01/2013, 07:12
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
Puntos: 834
Respuesta: Pasar de Arrays a Objetos

ipraetoriux, en el link que muestra Aijoona hay argumentos suficientes como para que veas que estás en un error
  #8 (permalink)  
Antiguo 30/01/2013, 07:29
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Pasar de Arrays a Objetos

Cita:
Iniciado por Panino5001 Ver Mensaje
ipraetoriux, en el link que muestra Aijoona hay argumentos suficientes como para que veas que estás en un error
que estoy en un error?...

...segun "la documentación oficial" del post que me indicas, las diferencias están mas orientadas a la interpretación y observación del objeto...

.. lógicamente es as simple a la observación y al escribir codigo hacer ...

Código Javascript:
Ver original
  1. var x = [1,2,3];

que hacer..

Código Javascript:
Ver original
  1. var x = new Array();
  2. x[0] = 1;
  3. x[1] = 2;
  4. x[2] = 3;

...justamente para no hacer estoooo, se desarrollan los literales dentro del lenguage, para facilitar escribir menos código...pero eso NO SIGNIFICA que el uso de literales sea mejor que la forma explicita de declarar un objeto...usar literales es mas fácil, es mas corto, es mas simple de ver, de analizar, de escribir, de observar, etc...en eso estamos de acuerdo...pero son ventajas para el que escribe o lee el código...pero no genera una mejor o menor perfomance en el core de javascirpt...
  #9 (permalink)  
Antiguo 30/01/2013, 07:31
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Pasar de Arrays a Objetos

Cita:
Iniciado por ipraetoriux Ver Mensaje
en que te basas para decir que hay que evitar???...afirmando estas cosas así, lo único que logras es confundir a gente que recién empieza con JavaScript...
Además de los argumentos mencionados en el thread que linkee y obviamente no leiste agrego:

Por una cuestión 'idiomatica', es decir de buenas practicas, se prefiere el uso de los constructores literales.

Y esto es tan sencillo de comprobar como ponerse a navegar proyectos estandartes de JavaScript y corroborarlo.

Idioms y consistencia > gustos personales.

EDIT: Dependiendo el engine, SI puede haber diferencia de performance. Y si te gusta ser quisquilloso, 'new Array()' tiene 9 caracteres más, con su consecuente peso (que dependera del encoding por supuesto)
__________________
blog | @aijoona
  #10 (permalink)  
Antiguo 30/01/2013, 07:36
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Pasar de Arrays a Objetos

Cita:
Iniciado por ipraetoriux Ver Mensaje
(...)pero eso NO SIGNIFICA que el uso de literales sea mejor que la forma explicita de declarar un objeto...usar literales es mas fácil, es mas corto, es mas simple de ver, de analizar, de escribir, de observar, etc...en eso estamos de acuerdo...pero son ventajas para el que escribe o lee el código...pero no genera una mejor o menor perfomance en el core de javascirpt...
Si la instanciación literal tiene numerosas ventajas (ya enumeradas) sobre la instanciación de constructores, como podes afirmar que no es "mejor".

THIS IS MADNESS.

PD: De la RAE

mejor.

(Del lat. melĭor, -ōris).

1. adj. comp. de bueno. Superior a otra cosa y que la excede en una cualidad natural o moral.
__________________
blog | @aijoona
  #11 (permalink)  
Antiguo 30/01/2013, 07:41
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Pasar de Arrays a Objetos

Cita:
Iniciado por Aijoona Ver Mensaje
Idioms y consistencia > gustos personales.
..ahora si estamos de acuerdo...como te puse en mi post anterior, el uso de literales esta mas orientado a la facilidad de leer o escribir código, pero no implica una diferencia en performance ni en nada que me lleve a "evitar" el uso de la forma explicita...

...entonces a mi entender en lugar de decir..."hay que evitar....", hubiera sido preferible decir algo como...."es recomendable para una mayor velocidad de escritura de código y una mejor lectura del mismo usar literales en lugar de forma explicita....porque? porque es mas fácil...pero no implica que a nivel de funcionalidad y proposito, sea uno mejor que el otro... "...
  #12 (permalink)  
Antiguo 30/01/2013, 07:46
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Pasar de Arrays a Objetos

Cita:
Iniciado por Aijoona Ver Mensaje
Si la instanciación literal tiene numerosas ventajas (ya enumeradas) sobre la instanciación de constructores, como podes afirmar que no es "mejor"..
...nono, estas mal interpretando...nunca dije que es o no mejor una forma que otra...el uso de LITERALES es mas fácil de leer, escribir e interpretar...pero eso es relativo a la persona que lee o escribe código...a nivel de funcionalidad y propósito es exactamente la misma cosa...

...habrá gente que le es mas fácil utilizar literales y habrá otros que le es mas fácil usar la forma explicita de declarar un objeto...pero no significa que el javascript engine va a interpreta mejor una forma u otra como para evitar el uso de alguna de estas formas de declarar objetos...
  #13 (permalink)  
Antiguo 30/01/2013, 07:56
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Pasar de Arrays a Objetos

Para que veas que si hay diferencia en performance (tanto para un lado como para otro)

http://jsperf.com/array-func
__________________
blog | @aijoona
  #14 (permalink)  
Antiguo 30/01/2013, 08:19
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Pasar de Arrays a Objetos

...jajajaja...haber...ya estas mezclando las cosas, ...a nivel de bits... lógicamente que la forma literal es mas liviana que la forma explicita...

cuanto bits tengo?...

Código Javascript:
Ver original
  1. var x = [1,2,3];

y cuantos bits tengo acá...

Código Javascript:
Ver original
  1. var x = new Array();
  2. x[0] = 1;
  3. x[1] = 2;
  4. x[2] = 3;

...sin entrar en lógica y calculo binario, en este ejemplo, es fácil darse cuenta que la forma literal ocupa menos bits que la forma explicita... lógicamente mientras mas bits ocupo, mas tiempo se necesita para su lectura por parte del interprete...pero ese tiempo son milésimas de segundos....

...esta comparación y diferencia de perfomance, tiene que ver con la cantidad de bits que uso al escribir cada carácter de cada instrucción...no tiene nada que ver con la declaración literal o explicita del objeto...no es que si uso la forma literal va a ser mas rápido que con la forma explicita...va a ser mas rápido por la cantidad de bits que utilizo para escribir de una forma u otra, pero no por la declaración literal o explicita del objeto en si misma...son cosas diferentes...
  #15 (permalink)  
Antiguo 30/01/2013, 08:26
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Pasar de Arrays a Objetos

Chequeaste el link donde podes comprobar que la performance SI se ve afectada?
__________________
blog | @aijoona
  #16 (permalink)  
Antiguo 30/01/2013, 08:35
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Pasar de Arrays a Objetos

Si mi amigo, lo he visto, por eso te escribí el post anterior...yo interpreto que la mínima diferencia de performanance se debe al uso de bits de las instrucciones, no al uso de la forma de declarar un objeto...
  #17 (permalink)  
Antiguo 30/01/2013, 08:42
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: Pasar de Arrays a Objetos

En ese caso, la performance de ejecucion poco y nada tiene que ver con el tamaño del código, siendo que el parsing de codigo es algo trivial.

Y esa "minima" diferencia es practicamente el doble de operaciones por segundo en Chrome (y ni siquiera te voy a mencionar Safari, donde la diferencia es RIDICULA).

Mis argumentos (que en este momento son cosas tan obvias que no las podes refutar):

* La instanciación por constructor es verbose.
* La instanciación por constructor es error-prone.
* La instanciación literal es preferida por la comunidad.
* La instanciación literal es más performante (lo suficiente como para tenerlo en cuenta).

Tus argumentos?

Ninguno, ergo, estás trolleando.

Me retiro de la discusión, que te garúe finito.
__________________
blog | @aijoona
  #18 (permalink)  
Antiguo 30/01/2013, 08:44
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 12 años, 7 meses
Puntos: 397
Respuesta: Pasar de Arrays a Objetos

Cita:
Iniciado por ipraetoriux Ver Mensaje
Si mi amigo, lo he visto, por eso te escribí el post anterior...yo interpreto que la mínima diferencia de performanance se debe al uso de bits de las instrucciones, no al uso de la forma de declarar un objeto...
Cita:
Iniciado por Aijoona Ver Mensaje
1. La notación de new Array es bastante verbose, situación que en igualdad de condiciones ya me parecería razón suficiente.

2. Es una notación que puede inducir errores, ya que sus argumento(s) puede significar un item o el length segun su tipo y cantidad:

Código Javascript:
Ver original
  1. var a, b, c, d;
  2.  
  3. a = [1];
  4. b = new Array(1);
  5. c = new Array('a');
  6. d = new Array(1, 2);
  7.  
  8. a[0]; // 1
  9. b[0]; // undefined
  10. c[0]; // "a"
  11. d[0]; // 1

3. En términos generales es más lenta la sintaxis de new Array. En jsPerf hay varios benchs (este en particular da una diferencia del ~35% en favor de []).
En esta presentación de Thomas Fusch (un gurú en el tema en mi opinión) a partir del slide 20 tambien se habla del tema.

Si bien ningún punto es concluyente per se, creo que son claras las desventajas de la notación new Array.

Saludos.
Cito al estimado del post que veo que no leíste

Al principio creía también que eso no era mucho problema el usar o no new y los literales, pero después de leer el hilo y leer la documentación allí propuesta me di cuenta que si existen diferencias marcadas entre lo uno y lo otro, pero pues eso ya queda si tu lo ves de esa manera

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #19 (permalink)  
Antiguo 30/01/2013, 08:51
Avatar de ipraetoriux  
Fecha de Ingreso: abril-2010
Ubicación: ipraetoriux.com
Mensajes: 1.125
Antigüedad: 14 años
Puntos: 155
Respuesta: Pasar de Arrays a Objetos

...nada tiene que ver con el tamaño de código?...jajajajja...pero vos donde te has recibido?...sabias que cada carácter que escribís en un ordenador ocupa una x cantidad de bits?...y que según sea la cantidad de bits que usas los compiladores e interpretes necesitan menor o mayor tiempo ademas de otros factores obviamente...?????...vamos amigo...eso lo ves en 1er año de Ingeniería...

...te vuelvo a repetir, escribir de forma literal ademas de ser mas fácil, y ocupa menos bits que la forma explicita...pero a nivel de funcionalidad es igual la forma explicita o literal, exactamente igual...

...de todas formas, un feedback enriquecedor...hasta la proxima
  #20 (permalink)  
Antiguo 30/01/2013, 08:57
 
Fecha de Ingreso: julio-2010
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: Pasar de Arrays a Objetos

Bueno y volviendo al tema principal, si supuse que de esa forma se ingresaban datos a los objetos, como aca:

Código Javascript:
Ver original
  1. myList["List1"][0] = "auto";

El punto es que yo lo quiero hacer dinamicamente... como lo hago con push() que lo agrega al final del array creando una nueva celda. En este caso como lo haria?

Saludos.
  #21 (permalink)  
Antiguo 30/01/2013, 10:15
 
Fecha de Ingreso: julio-2010
Mensajes: 126
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: Pasar de Arrays a Objetos

Perdon, estuve viendo un poco el tema y descubri que entendi mal algo.... el push(), splice() y demas siguen funcionando en objetos (puesto que los arrays tambien son objetos). Asi que solucionado ^^, me salia mal el codigo por una boludez mia, pero ya esta.

Con respecto a la performance de usar [] y demas, ya lo habia leido, solo que de mala costumbre lo escribi mal aca.

Gracias a todos.

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 10:56.