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

214
Vistas
Keeping references without modifying the state in javascript

I have this impure code that prints two equal messages

class P {
   constructor() {
        this.x  = 0
        this.y  = []
   }
}

const incrX = (p)   => { p.x = p.x + 1 ; return p }
const incrY = (p,q) => ( p.y.push(q)   ; return p }

const ps = [ new P() , new P() ]

const result = ps.map( (_,i) => i === 0 ? incrY(ps[i],ps[i+1]) : incrX(ps[i]) )

console.log( result[0].y[0] )
console.log( result[1] )

But using pure functions, the prints are not equal, because ps[0].y[0] keeps an old reference

class P {
   constructor() {
        this.x  = 0
        this.y  = []
   }
}

const incrX = (p)   => ({ ...p , x : p.x + 1 })
const incrY = (p,q) => ({ ...p , y: [ ...p.y , q ] })

const ps = [ new P() , new P() ]

const result = ps.map( (_,i) => i === 0 ? incrY(ps[i],ps[i+1]) : incrX(ps[i]) )

console.log( result[0].y[0] )
console.log( result[1] )

Is there an way to keep references using something similar to the pure version ? Maybe using an array that stores references to references, is this even possible in javascript ?

about 4 years ago · Juan Pablo Isaza
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