ES6解构赋值:如何将现有对象的指定属性提取到新对象?
如何从对象中提取指定键到新对象?
当然可以实现!你说的这种从已有对象里挑选特定键生成新对象,还能额外添加属性的场景非常常见,这里给你几个更高效的方案,尤其是你想要的「无需关注多余键」的最优解:
单语句直接实现(无需处理多余键)
如果你想用单条语句完成,同时完全不引入多余的键,可以用立即执行函数表达式(IIFE)结合解构赋值:
const test = {a:1, b:2, c:3, d:4, e:5 }; const abc = (({a, b, c}) => ({a, b, c, f: 6}))(test);
原理很简单:先在函数参数里解构出test中的a、b、c,然后直接返回包含这三个属性和新增f:6的新对象,一行搞定,完全不用管d、e这些多余键。
更灵活的复用方案
如果以后需要多次提取不同的键,或者添加不同的额外属性,写个工具函数会更方便:
// 工具函数:提取指定键,并合并额外属性 const pickAndMerge = (sourceObj, pickKeys, extraProps) => { // 先提取指定的键 const picked = pickKeys.reduce((result, key) => { result[key] = sourceObj[key]; return result; }, {}); // 合并提取的内容和额外属性 return {...picked, ...extraProps}; }; // 使用示例 const test = {a:1, b:2, c:3, d:4, e:5 }; const abc = pickAndMerge(test, ['a','b','c'], {f:6});
这个方法不仅不会引入多余键,还能灵活适配不同的提取需求,多余键再多也不用操心。
对比你提到的两种方法
- 你最初的解构后组装的方法是可行的,但需要拆分多行;
- 用扩展运算符
...test的方法会把所有属性都复制过来,之后还要手动删除不需要的键,当多余键数量多的时候会非常繁琐,显然不是最优解。
内容的提问来源于stack exchange,提问作者Rahul Gandhi
相关产品推荐
相关产品推荐

