Я намагаюся створити метод глибокої копії карти для мого проекту Redux, який буде працювати з об'єктами, а не з масивами. Я читав, що в Redux кожен штат не повинен нічого змінювати в попередніх штатах.
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
output[key] = callback.call(this, {...object[key]});
return output;
}, {});
}
Це працює:
return mapCopy(state, e => {
if (e.id === action.id) {
e.title = 'new item';
}
return e;
})
Однак він не копіює внутрішні елементи, тому мені потрібно налаштувати його так:
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;
}, {});
}
Це менш елегантно, оскільки вимагає знання переданих об’єктів. Чи є спосіб у ES6 використовувати синтаксис поширення для глибокого копіювання об’єкта?