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
相关产品推荐
相关产品推荐

