如何使用展开运算符有条件更新对象键值
实现方案
你原代码里的location && location : ''是语法错误,无法实现预期逻辑。要满足「仅原对象存在location键时清空对应值、不存在则不新增该属性」的需求,可通过条件展开的写法实现:
const resetPerson = { ...person, name: '', age: '', ...(Object.hasOwn(person, 'location') ? { location: '' } : {}) };
逻辑说明
- 用
Object.hasOwn(person, 'location')判断person自身是否存在location属性,比直接写person.location做判断更严谨,不会因为location的值是空字符串、null、0这类假值出现误判。 - 判断成立时展开
{ location: '' },覆盖原对象的location值为空;判断不成立时展开空对象,不会给新对象追加location属性,完全符合需求。 - 如果你使用TypeScript,不建议随意给变量标注
any类型,会丢失类型校验能力,可直接基于person的类型自动推导resetPerson的类型。
内容的提问来源于stack exchange,提问作者Nagasai
相关产品推荐
相关产品推荐

