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

104
Vistas
Código angular asignando valores misteriosamente

Este código está asignando el valor de 'temps' a this.messages por alguna razón que no entiendo, cualquier ayuda sería apreciada. Sé que el problema radica en el siguiente fragmento de código, ya que eliminar la sección .sort cambia el orden de salida de this.messages.

 this.currentMessageSubject.subscribe(()=> { console.log('Refreshing messages') if (this.conversationId) { firebase.firestore().collectionGroup('conv').where("parentMessageId", "==", this.conversationId).get().then(async (querySnapshot) => { let temps: FirebaseMessages; let tempsMsgs = new Map(); temps = this.messages; temps.messages = [] querySnapshot.forEach((newConvo) => { const thing = { id: newConvo.id, ...newConvo.data() } as FirebaseMessage; if (!tempsMsgs.has(thing.id)) { tempsMsgs.set(thing.id, thing) temps.messages.push(thing); } }) temps.messages.sort(function(a,b){ return a.timestamp.seconds - b.timestamp.seconds; }); temps.messages = temps.messages.filter((message) => { if (message.id) { return true; } return false; }) }) } })
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Si asigna un valor no primitivo a una variable (es decir, un objeto), se pasará por referencia.

Entonces, en tu caso esta línea:

 temps = this.messages;

asigna el mismo objeto que está en sus this.messages a su variable temps . Por lo tanto, editar temps también editará this.messages , ya que ambos apuntan al mismo objeto.

Tendrá que clonar su objeto y asignar el clon a su variable temps . Con respecto a la clonación, hay varias buenas respuestas sobre la clonación de objetos en SO, por lo que no cubriré eso aquí ya que no conocemos la estructura de los messages .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Al hacer temps = this.messages; , la referencia se pasa a temps .

Debe clonar este objeto de otra manera (observe la línea de cambio 7):

 this.currentMessageSubject.subscribe(()=> { console.log('Refreshing messages') if (this.conversationId) { firebase.firestore().collectionGroup('conv').where("parentMessageId", "==", this.conversationId).get().then(async (querySnapshot) => { let temps: FirebaseMessages; let tempsMsgs = new Map(); temps = {...this.messages}; temps.messages = [] querySnapshot.forEach((newConvo) => { const thing = { id: newConvo.id, ...newConvo.data() } as FirebaseMessage; if (!tempsMsgs.has(thing.id)) { tempsMsgs.set(thing.id, thing) temps.messages.push(thing); } }) temps.messages.sort(function(a,b){ return a.timestamp.seconds - b.timestamp.seconds; }); temps.messages = temps.messages.filter((message) => { if (message.id) { return true; } return false; }) }) } })

Puede consultar este tema para obtener más información sobre esto: ¿Cuál es la forma más eficiente de clonar en profundidad un objeto en JavaScript?

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