Tengo este código impuro que imprime dos mensajes iguales
class P { constructor() { this.x = 0 this.y = [] } } const incrX = (p) => { px = px + 1 ; return p } const incrY = (p,q) => ( pypush(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] )Pero usando funciones puras, las impresiones no son iguales, porque ps[0].y[0] mantiene una referencia antigua
class P { constructor() { this.x = 0 this.y = [] } } const incrX = (p) => ({ ...p , x : px + 1 }) const incrY = (p,q) => ({ ...p , y: [ ...py , 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] )¿Hay alguna manera de mantener las referencias usando algo similar a la versión pura? Tal vez usando una matriz que almacena referencias a referencias, ¿es esto posible en javascript?