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

105
Vistas
Comportamiento inesperado del bucle For - Three.js

Creé una matriz para contener mis objetos 3D, pero la iteración para realizar cambios no funciona como se esperaba. ¿Cuál es la diferencia entre estos dos bloques de código y cómo puedo cambiar el bucle for en consecuencia? objects solo contiene los objetos 3D que se almacenan con los nombres de las variables dados en el segundo bloque de código. Simplemente no entiendo cómo estos dos serían diferentes.

 objects.forEach((obj, index) => { objects[index] = obj.children[0]; objects[index].angle = 0; });

versus

 sun.angle = 0; mercury = mercury.children[0]; mercury.angle = 0; venus = venus.children[0]; venus.angle = 0; earth = earth.children[0]; earth.angle = 0;

El segundo bloque de código funciona aquí, pero el primero no.

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

0

Sospecho que desea que la asignación de objects[index] = obj.children[0] cambie a lo que apunta la variable para el primer planeta, pero no es así como funcionan las referencias a objetos. Este diagrama podría ayudar a explicar:

 let moon = { children: [] } let earth = { children: [ moon ] } let objects = [ earth ];

En la memoria esto se ve así:

 earth --------> { <-------------------+ children: [ | <ref-moon> -----+ | } | | | | moon ---------> { children: [] } <--+ | | objects -----> [ | <ref-earth> -----------+ ]

Entonces, earth es una variable que apunta al objeto en la memoria, y los objects[0] también apuntan al mismo objeto. Si tuviera que ejecutar el código objects[0] = earth.children[0] , terminaríamos con esto en el diagrama:

 earth --------> { children: [ <ref-moon> -----+ } | / moon ---------> { children: [] } <-+---+ | objects -----> [ | <ref-moon> -----------+ ]

Verá que la earth todavía apunta al objeto que originalmente hizo, pero los objects[0] ahora apuntan a su hijo en su lugar. Sospecho que pensaste que lo siguiente sería equivalente, pero no lo son:

  1. objetos[0] = tierra.niños[0];
  2. tierra = tierra.niños[0];

La asignación en la primera línea no cambia la earth variable en absoluto.

Esto se debe a que cada variable (tierra, luna, objetos) es solo una referencia a un objeto en la memoria. Lo importante a entender es la diferencia entre cambiar una referencia y cambiar el objeto al que se refiere. El siguiente ejemplo de código demuestra el concepto un poco más directamente.

 let obj1 = { id: 'red' } let obj2 = { id: 'blue' } let array = [ obj1, obj2 ] obj1 = obj2 // now both variables point to blue console.log('obj1 is blue:', obj1) console.log('obj2 is blue:', obj2) console.log('but array still has red:', array)

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