You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:45:18