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

JS中如何通过指定属性名解构对象子集生成新对象

如何通过指定包含的属性名解构对象子集

嘿,这个问题问得很实用!你已经掌握了用剩余属性语法const {a,...newObj} = original排除不需要的属性,那如果想主动指定要保留的属性来得到{b:2, c:3},其实有两种常用的方案,我给你详细说说:

方案一:直接解构重组(适合单次操作)

这种方式最直观,先把需要的属性从原对象里解构出来,再用对象字面量的简写语法重新组合成新对象:

const original = {a:1, b:2, c:3};
// 先解构出需要的属性
const { b, c } = original;
// 重组为新对象
const newObj = { b, c }; // 结果:{b:2, c:3}

优点是简单易懂,不需要额外封装代码,适合只提取少量属性的场景。

方案二:封装可复用的工具函数(适合多次操作)

如果你需要频繁从不同对象中提取指定属性,搞个可复用的工具函数会更高效。我们可以写一个pick函数,专门用来提取对象的指定属性:

// 定义pick函数:接收原对象和要提取的属性名列表
const pick = (obj, ...keys) => {
  return keys.reduce((result, key) => {
    // 只提取原对象中存在的属性(可选判断,根据需求调整)
    if (obj.hasOwnProperty(key)) {
      result[key] = obj[key];
    }
    return result;
  }, {});
};

// 使用示例
const original = {a:1, b:2, c:3};
const newObj = pick(original, 'b', 'c'); // 结果:{b:2, c:3}

这个函数的逻辑很清晰:用reduce遍历传入的属性名,把原对象中存在的属性逐一添加到空对象里,最后返回这个新对象。以后不管要提取多少属性,只要调用pick函数就行,非常方便。

补充说明

目前原生ES语法里还没有像排除法那样一行搞定的“指定包含属性”的解构语法,所以上面两种是最常用的实现方式。根据你的使用场景选就行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:49:01