Estoy tratando de crear un método de mapa de copia profunda para mi proyecto Redux que funcionará con objetos en lugar de matrices. Leí que en Redux cada estado no debería cambiar nada en los estados anteriores.
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
output[key] = callback.call(this, {...object[key]});
return output;
}, {});
}
Funciona:
return mapCopy(state, e => {
if (e.id === action.id) {
e.title = 'new item';
}
return e;
})
Sin embargo, no copia en profundidad los elementos internos, por lo que necesito modificarlo para:
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
let newObject = {...object[key]};
newObject.style = {...newObject.style};
newObject.data = {...newObject.data};
output[key] = callback.call(this, newObject);
return output;
}, {});
}
Esto es menos elegante ya que requiere saber qué objetos se pasan. ¿Hay alguna forma en ES6 de usar la sintaxis de propagación para copiar en profundidad un objeto?