Angular中如何高效将一个对象的属性赋值给另一个对象?
批量更新对象属性的优化写法建议
方案1:对象展开运算符(...)
通过展开运算符快速批量拷贝属性,对需要特殊处理的属性(比如日期转换)单独覆盖:
this.diaryToEdit = { ...this.diaryToEdit, ...updatedDiary, // 单独处理日期转换 actioDate: new Date(updatedDiary.actioDate), // 嵌套对象单独浅拷贝,避免引用共享 diaryStatus: { ...updatedDiary.diaryStatus } };
注:如果diaryStatus是深层嵌套对象,需要深拷贝的话,可自行实现递归深拷贝逻辑,或使用深拷贝工具函数。
方案2:Object.assign直接合并
适合不需要替换原对象引用的场景,批量合并后单独处理特殊属性:
// 批量合并所有可枚举属性 Object.assign(this.diaryToEdit, updatedDiary); // 覆盖需要转换的日期属性 this.diaryToEdit.actioDate = new Date(updatedDiary.actioDate); // 嵌套对象单独合并 Object.assign(this.diaryToEdit.diaryStatus, updatedDiary.diaryStatus);
方案3:封装通用更新函数(多场景复用)
如果多处需要类似的更新逻辑,可以封装工具函数统一处理:
function updateDiary(target, source) { // 批量合并基础属性 Object.assign(target, source); // 处理特殊属性 target.actioDate = new Date(source.actioDate); // 合并嵌套对象 Object.assign(target.diaryStatus, source.diaryStatus); // 可添加其他需要特殊处理的属性逻辑 } // 调用方式 updateDiary(this.diaryToEdit, updatedDiary);
可选:过滤不需要更新的属性
如果updatedDiary包含不需要同步的属性,可先过滤再合并:
// 定义允许更新的属性列表 const allowedProps = ['diaryStatus', 'actioDate', 'actionText', 'diaryType']; // 筛选出需要的属性 const filteredUpdate = Object.fromEntries( Object.entries(updatedDiary).filter(([key]) => allowedProps.includes(key)) ); // 合并属性并处理特殊字段 Object.assign(this.diaryToEdit, filteredUpdate); this.diaryToEdit.actioDate = new Date(updatedDiary.actioDate);
内容的提问来源于stack exchange,提问作者vamsi
相关产品推荐
相关产品推荐

