Saya mencoba membuat metode peta salinan dalam untuk proyek Redux saya yang akan bekerja dengan objek daripada array. Saya membaca bahwa di Redux setiap negara bagian tidak boleh mengubah apa pun di negara bagian sebelumnya.
export const mapCopy = (object, callback) => {
return Object.keys(object).reduce(function (output, key) {
output[key] = callback.call(this, {...object[key]});
return output;
}, {});
}
Berhasil:
return mapCopy(state, e => {
if (e.id === action.id) {
e.title = 'new item';
}
return e;
})
Namun itu tidak menyalin item dalam jadi saya perlu mengubahnya menjadi:
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;
}, {});
}
Ini kurang elegan karena perlu mengetahui objek mana yang dilewati. Apakah ada cara di ES6 untuk menggunakan sintaks penyebaran untuk menyalin objek secara mendalam?