如何基于现有对象创建含原键与嵌套对象指定值的新对象
提取嵌套对象指定键值生成新对象
现有如下对象:
let Object1 = { id1: { date: '23-01-2023', status: 'completed' }, id2: { date: '02-01-2023', status: 'pending' } }需要创建新对象,保留原对象所有键,值为嵌套对象中
status键对应的值,示例结果:let Object2 = { id1: 'completed', id2: 'pending' }
下面是几种常用的实现方式:
方法1:Object.entries() + Array.reduce()
函数式风格的简洁写法,通过数组方法构建新对象:
const Object2 = Object.entries(Object1).reduce((acc, [key, value]) => { acc[key] = value.status; return acc; }, {});
Object.entries(Object1)将原对象转换为键值对数组,reduce遍历数组并将每个键与对应的status值存入累加器,最终返回目标对象。
方法2:for...in循环
命令式写法,适合需要更直观控制遍历过程的场景:
const Object2 = {}; for (const key in Object1) { if (Object1.hasOwnProperty(key)) { Object2[key] = Object1[key].status; } }
添加hasOwnProperty判断是为了避免遍历到原型链上的继承属性,确保只处理原对象自身的键。
方法3:Object.fromEntries()
ES2019及以上版本支持的方法,写法更简洁:
const Object2 = Object.fromEntries( Object.entries(Object1).map(([key, value]) => [key, value.status]) );
先将原对象转为键值对数组,用map把每个值替换为嵌套对象的status,最后通过Object.fromEntries将数组转回对象。
内容的提问来源于stack exchange,提问作者Daniel Corona
相关产品推荐
相关产品推荐

