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

如何将含4个属性的Object映射赋值给3个属性的目标Object

JS对象提取指定属性赋值实现方案

你需要从已有的role对象中排除多余的roleId字段,仅保留name、description、isModerator三个字段赋值给roleDetails,直接执行roleDetails = role会把所有字段全带过去,还会存在对象引用共享的问题,可以用以下几种方式实现需求:

  • 解构剩余运算符(最推荐,代码最简洁)
    利用ES6的对象解构语法,把不需要的roleId单独拆解出来,剩余字段自动归集到新对象中,同时生成的是浅拷贝的新对象,不会和原对象互相影响:

    const { roleId, ...roleDetails } = role;
    
  • 手动映射目标字段(可读性最高,无兼容问题)
    如果需要兼容不支持ES6解构的老旧环境,或者希望代码逻辑一眼能看懂,直接新建对象手动取需要的字段赋值即可:

    const roleDetails = {
      name: role.name,
      description: role.description,
      isModerator: role.isModerator
    };
    
  • 通用pick工具函数(适合同类场景复用)
    如果项目里有大量「从大对象中挑选指定字段生成新对象」的需求,可以封装一个通用的字段提取函数,后续直接传目标字段列表就能调用:

    function pick(source, keys) {
      const target = {};
      keys.forEach(key => {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      });
      return target;
    }
    
    // 调用示例
    const roleDetails = pick(role, ['name', 'description', 'isModerator']);
    

注意:不要直接使用roleDetails = role赋值,该写法是将原对象的内存地址直接赋值给新变量,不仅会残留多余的roleId字段,后续修改roleDetails或者role任意一方的属性,另一方也会同步变更,容易引发隐蔽的bug。

以上任意一种写法执行后,调用console.log(roleDetails)都会得到你预期的输出:

{
  name: "HR",
  description: "HR of the Company",
  isModerator: "N"
}

内容的提问来源于stack exchange,提问作者Benezir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:00:36