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

JavaScript中如何仅复制对象指定属性至新对象(避免重复写属性名)

解决方案:用解构赋值避免重复属性名

当然有更优雅的方式!你可以利用JavaScript的对象解构赋值来实现,既不用重复写foo属性名,也不需要事后删除多余的bar属性。下面是几种实用的写法:

1. 分步解构+对象简写(直观易懂)

先从原对象中解构出需要的属性,再用对象字面量的简写语法创建新对象:

const a = { foo: 45, bar: 25 };
// 从a中提取foo属性
const { foo } = a;
// 利用变量名与属性名一致的简写,创建新对象b
const b = { foo };

这种写法很清晰,适合新手理解,而且完全避免了重复书写foo。

2. 立即执行函数(一行搞定)

如果想更紧凑,可以用立即执行函数表达式(IIFE)把解构和对象创建合并成一行:

const a = { foo: 45, bar: 25 };
const b = (({ foo }) => ({ foo }))(a);

这里的逻辑是:函数接收a作为参数,先解构出foo,然后返回一个包含foo的新对象,最后立即执行这个函数并把结果赋值给b。

3. 可复用的提取函数(适合多场景)

如果需要频繁从对象中提取指定属性,可以写一个通用的pick函数,复用性拉满:

// 定义通用提取函数
function pick(obj, ...keys) {
  return keys.reduce((result, key) => {
    if (obj.hasOwnProperty(key)) {
      result[key] = obj[key];
    }
    return result;
  }, {});
}

// 使用示例
const a = { foo: 45, bar: 25 };
const b = pick(a, 'foo'); // 提取单个属性
const c = pick(a, 'foo', 'bar'); // 也可以提取多个属性

这个函数不仅能解决你当前的问题,以后需要提取多个属性时也能直接用,非常灵活。

对比你原来的写法let b = { foo: a.foo },这些方法都避免了重复书写属性名;而对比扩展运算符{...a}后删除bar的写法,它们不需要额外的删除操作,效率和可读性都更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:13:40