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

114
Vistas
por qué obtengo los mismos valores de objetos

Estoy trabajando en un proyecto Angular/firebase

en esta función:

¿Por qué obtengo una matriz con una matriz duplicada? El resultado esperado debe ser una matriz que contenga 2 objetos, cada objeto tiene sus propios valores

Especialmente con el valor dropNumber, obtengo el mismo valor (2) en ambos objetos

 createAutoObject() { this.drops.length = 0; let objectToInsert = { campaignName: '', dropStatus: '', isSeededReceived: false, isLastDrop: false, isDropCompleted: false, dropNumber: 0, dropVolume: '', }; for (let i = 1; i <= 2; i++) { objectToInsert.campaignName = campaignObject.campaignName; objectToInsert.dropNumber = i; objectToInsert.dropVolume = campaignObject.firstDropVolume; this.drops.push(objectToInsert); } return this.drops; }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La razón por la que ambos elementos de su matriz tienen el mismo dropNumber es que ambos apuntan al mismo objeto (objectToInsert).

Después de agregar el primer elemento a la matriz, su ciclo establece dropNumber en un valor mayor, listo para agregar el segundo elemento a la matriz. Pero objectToInsert sigue siendo la misma referencia de objeto, a la que apunta el primer elemento de la matriz.

Para crear un nuevo objeto para cada elemento que está insertando, debe agregar esta línea antes de configurar cualquier propiedad de objeto para ese elemento:

 objectToInsert = new Object();

Luego, cada elemento en su matriz será una referencia de objeto diferente y las propiedades tendrán los valores que espera.

Aquí hay información sobre cómo trabajar con objetos en JavaScript que puede proporcionar más ayuda en esta área.


EDITAR: con el problema básico de JavaScript explicado, ahora pensemos en cómo podría hacerlo mejor en TypeScript con una clase.

Actualmente crea una instancia de objectToInsert como un tipo anónimo, así:

 let objectToInsert = { campaignName: '', . . .

Los tipos anónimos son muy potentes y flexibles, pero aunque se pueden tipificar fuertemente, su anonimato significa que (por definición) no tienen un nombre de tipo que pueda usar para crear instancias de objetos individuales de ese tipo.

Los tipos con nombre, o las clases tradicionales, no tienen esta deficiencia y puede usar esto aquí para su beneficio.

Darle un nombre al tipo, como Campaign :

 class Campaign { campaignName: string = ''; isSeededReceived: boolean = false; dropNumber:number = 0; dropVolume:number = 0; firstDropVolume:number = 0; }

le permite referirse al tipo por su nombre al instanciar objetos:

 for (let i = 1; i <= 2; i++) { let objectToInsert = new Campaign(); objectToInsert.campaignName = campaignObject.campaignName; objectToInsert.dropNumber = i; objectToInsert.dropVolume = campaignObject.firstDropVolume; this.drops.push(objectToInsert); }

La matriz de miembros this.drops , a la que hace referencia pero cuya declaración no se ve aquí, obviamente necesitaría un tratamiento similar. Es decir, tanto la matriz como cualquier otro código que la use también necesitarían actualizarse para pensar en términos de Campaign en lugar de Object . Los detalles de eso dependerán de su diseño, pero deben explicarse por sí mismos.

Aparte del aspecto de autodocumentación de tener un nombre de tipo, el beneficio que esto trae es que su código tiene una mayor seguridad de tipos, ya que ya no está obligado a usar any para agregar objetos a la matriz.

Hay un TypeScript Playground que puede resultarle útil para probar cosas rápidamente en línea.

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