JavaScript如何单行完成对象解构并赋值到新对象
实现方案
完全可以用更简洁的解构写法实现,不需要逐个手动赋值属性,下面是两种常用的原生实现方式:
方案1:逗号连写解构+对象构造(可读性最高)
const {id, status, frequency} = adData, params = {id, status, frequency, user: getLoggedInUser()};
说明:
- 一行完成变量解构+新对象构造,逻辑清晰易读
- 唯一的注意点是会在当前作用域声明
id、status、frequency三个临时变量,如果你的业务逻辑里本来就要用到这三个值,这种写法最合适
方案2:立即执行箭头函数(无临时变量污染)
const params = (({id, status, frequency}) => ({id, status, frequency, user: getLoggedInUser()}))(adData);
说明:
- 利用函数参数位置的解构能力,直接提取需要的属性返回新对象,不会在当前作用域产生多余的临时变量
- 只有一次可以忽略的函数调用开销,适合不想引入额外临时变量的场景
你之前两种写法不符合预期的原因:
const params = {id, status, frequency} = adData;
这种写法的赋值逻辑是先把adData解构赋值给id/status/frequency三个变量,再把整个adData赋值给params,最终params是完整的adData对象,不是你要的属性子集。const params = {id, status, frequency, getLoggedInUser(): user} = adData;
解构语法仅支持从右侧对象提取匹配的属性,不支持在解构的对象字面量里直接新增自定义属性,所以语法不合法。
补充方案(项目引入了lodash的场景)
如果你的项目已经引入了lodash工具库,还可以用pick方法更直观的实现:
const params = Object.assign(_.pick(adData, ['id', 'status', 'frequency']), {user: getLoggedInUser()});
内容的提问来源于stack exchange,提问作者shrekDeep
相关产品推荐
相关产品推荐

