如何高效移除嵌套对象的platform键并提升属性层级?
简洁实现嵌套对象属性提升(移除
platform键) 核心需求
将原始对象中每个子项的platform嵌套对象属性提升到父层级,并移除platform键,替代传统for循环的实现方式。
实现方案
方案1:基础版(假设所有子项都有platform键)
利用Object.fromEntries + Object.entries + map的组合,一行核心代码完成转换:
const originalObj = { option1: { platform : { key1: 'value1', key2: 'value2', key3: 'value3' } }, option2: { platform : { key1: 'value1', key2: 'value2', key3: 'value3' } }, option3: { platform : { key1: 'value1', key2: 'value2', key3: 'value3' } } }; // 转换逻辑 const transformedObj = Object.fromEntries( Object.entries(originalObj).map(([key, { platform }]) => [key, platform]) ); console.log(transformedObj);
原理:
Object.entries(originalObj)将原始对象转为[键, 值]的数组格式map遍历数组,解构每个子项的platform对象,返回新的[键, platform对象]数组Object.fromEntries将处理后的键值对数组转回对象
方案2:兼容无platform键的场景
如果存在子项没有platform键的情况,可添加默认值避免解构报错:
const transformedObj = Object.fromEntries( Object.entries(originalObj).map(([key, { platform = {} }]) => [key, platform]) );
方案3:保留子项其他属性的场景
如果每个子项除了platform还有其他属性,可通过对象展开运算符合并属性:
// 假设有带额外属性的原始对象 const originalObjWithExtra = { option1: { extraKey: 'extraValue', platform : { key1: 'value1', key2: 'value2' } } }; const transformedObj = Object.fromEntries( Object.entries(originalObjWithExtra).map(([key, { platform, ...rest }]) => [ key, { ...rest, ...platform } ]) ); // 输出:{ option1: { extraKey: 'extraValue', key1: 'value1', key2: 'value2' } }
说明
这些实现基于JavaScript原生API,写法简洁优雅,性能上与for循环差异极小,但代码可读性和维护性更强,符合现代函数式编程风格。
内容的提问来源于stack exchange,提问作者Dharmik Soni
相关产品推荐
相关产品推荐

