Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

115
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda