VUE3 Object.assign 获取想要的字段?

只取form的字段,避免覆盖 Object.assign(form, res.data); res.data覆盖form的值,不获取res.data覆盖过来的新字段

阅读 2k
avatarAI BotBETA

在Vue3和JavaScript中,Object.assign() 方法用于将源对象的所有可枚举属性复制到目标对象。但是,它不会清除目标对象中已存在的属性。

如果你想要清空被 res.data 覆盖的 form 对象的特定字段,你需要手动删除这些字段。例如,如果你要清空 form 对象中的所有 res.data 中存在的字段,你可以这样做:

for (let key in res.data) {
  if (form.hasOwnProperty(key)) {
    delete form[key];
  }
}

这段代码会遍历 res.data 中的所有键,并检查 form 对象是否有相同的键。如果有,则使用 delete 操作符删除 form 对象中的该键。

请注意,Object.assign() 是浅复制,这意味着如果 res.data 中的属性值是对象或数组,它们将被复制引用,而不是被复制一份新的对象或数组。如果你希望深度复制这些复杂数据结构,你可能需要使用其他方法,如递归复制函数或库,如lodash的 _.cloneDeep() 函数。

4 个回答
 let tenant = {}
  let data = tenantList.data.find(item => item.id == id);
  for (let key in data) {
    delete data["status"]  // 删除会覆盖的同名状态字段
    if (form.hasOwnProperty(key)) {  // 只取form需要的
      tenant[key] = data[key]
    }
  }
  Object.assign(form, tenant);

根据你的意思是想让res.data覆盖form里存在的属性值,但不想要form里没有的属性,可以使用以下方法:

Object.keys(form).forEach((key) => {
    form[key] = res.data[key]
})

你可能需要的是这种效果

const data = {...form, ...res.data}

除了 Object.keys 别无他法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题