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

