如何更优实现从对象数组提取属性并生成含新值的新对象?
优化方案整理
方案1:简化解构写法
直接在map的参数里完成解构,省去额外变量声明,代码更紧凑:
const a = things.map(({ obj1, obj2, obj3 }) => ({ obj1, obj2, obj3, newVal: null, otherNewVal: null }));
方案2:动态属性提取(适合属性较多的场景)
如果需要提取的属性数量多,或者属性列表可能动态调整,可以用属性数组配合Object.fromEntries批量提取,再合并新属性:
const targetProps = ['obj1', 'obj2', 'obj3']; const a = things.map(thing => ({ ...Object.fromEntries(targetProps.map(prop => [prop, thing[prop]])), newVal: null, otherNewVal: null }));
方案3:封装复用的提取函数
如果这类提取操作在项目中多次出现,可以封装一个通用的pick函数,提升代码复用性:
function pick(obj, props) { return props.reduce((result, prop) => { result[prop] = obj[prop]; return result; }, {}); } const a = things.map(thing => ({ ...pick(thing, ['obj1', 'obj2', 'obj3']), newVal: null, otherNewVal: null }));
方案对比
- 方案1最适合提取属性少的场景,写法直观,性能最优
- 方案2和3适合属性数量多或需要动态调整的场景,可维护性更强
内容的提问来源于stack exchange,提问作者pianoman102
相关产品推荐
相关产品推荐

