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

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);

说明:

  • 利用函数参数位置的解构能力,直接提取需要的属性返回新对象,不会在当前作用域产生多余的临时变量
  • 只有一次可以忽略的函数调用开销,适合不想引入额外临时变量的场景

你之前两种写法不符合预期的原因:

  1. const params = {id, status, frequency} = adData;
    这种写法的赋值逻辑是先把adData解构赋值给id/status/frequency三个变量,再把整个adData赋值给params,最终params是完整的adData对象,不是你要的属性子集。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:57:02