Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

69
Vistas
Javascript array.push cambia algunos elementos que ya están en la matriz

Estoy tratando de agregar a una matriz, la matriz al final debe ser> [0] (hoy) Nombre: Día 1 Fecha: viernes 10 de junio...

 > [0] (today) Name:Day1 Date:Fri June 10... > [1] (today) Name:Day1+2 Date:Sun June 12... > [0] (today) Name:Day1 Date:Fri June 10... > [1] (today) Name:Day1+2 Date:Sun June 12... > [2] (today) Name:Day1+3Date:Mon June 13...

El enlace con mi sesión de depuración es:

Pero en cambio, la Fecha: cambia para cada elemento de la matriz y es la última fecha que se enviará

 > [0] Day1 - Fri Jun 10 2022 10:13:15 GMT-0700 (Pacific Daylight Time) > [0] Day1 - Sun Jun 12 2022 10:13:15 GMT-0700 (Pacific Daylight Time) > [1] Day1+2 - Sun Jun 12 2022 10:13:15 GMT-0700 (Pacific Daylight Time) [0] Day1 - Mon Jun 13 2022 10:13:15 GMT-0700 (Pacific Daylight Time) [1] Day1+2 - Mon Jun 13 2022 10:13:15 GMT-0700 (Pacific Daylight Time) [2] Day1+3 - Mon Jun 13 2022 10:13:15 GMT-0700 (Pacific Daylight Time)

Si alguien pudiera explicarme esto, se lo agradecería. Soy bastante nuevo en JS, así que por favor sea amable.

 // globals var TodaysDate; var holidays = []; function ShowHolidays() { console.log(holidays); for (let i = 0; i < holidays.length; i++) { console.log("[" + i + "] " + holidays[i].name + " - " + holidays[i].date); } } function AJSTEST() { TodaysDate = new Date(); holidays.push({ name: "Day1", date: TodaysDate }); ShowHolidays(); debugger; var AD = TodaysDate; AD.setDate(AD.getDate() + 2); debugger; holidays.push({ name: "Day1+2", date: AD }); ShowHolidays(); AD.setDate(AD.getDate() + 1); holidays.push({ name: "Day1+3", date: AD }); ShowHolidays(); debugger; } AJSTEST();

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Lo que ha encontrado es el antiguo problema (que no es realmente un problema, una vez que lo comprende, se convierte más en una herramienta que en un obstáculo) de pasar por referencia (en oposición a pasar por valor, como usted cree que debería estar sucediendo).

Para llegar a la raíz de esto, los objetos (básicamente todo lo que tiene que usar la palabra clave new para crear) se almacenan de manera diferente a los elementos como ints, porque son muy grandes. Los números enteros son tan pequeños que cuando hace algo como el ejemplo a continuación, no ocupa mucho espacio de almacenamiento, por lo que pasa el valor de x a y y ahora son campos separados con valores separados.

 let x = 1 let y = x x += 1

Sin embargo, como dije, Date es un objeto. Debido a que los objetos pueden ocupar mucho espacio en el almacenamiento, se pasan por referencia. Eso significa que simplemente pasamos la dirección en la memoria a todas las variables/métodos donde le gustaría usarla.

Para resumir, lo que ha creado al final de su método es una larga lista de 3 referencias, todas apuntando al mismo objeto, no a 3 objetos separados. Así que cada vez que haces AD.setDate(AD.getDate() + n); está manipulando el objeto al que apunta AD , y debido a que todos los elementos en su matriz también apuntan a la misma dirección en la memoria, reflejan el mismo cambio.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda