最佳答案
我正在尝试为我的 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中有没有使用扩展语法深度复制对象的方法?