如何将嵌套JavaScript对象属性名转为数组键并重构结构
对象结构转换解决方案
先明确你的需求:
原始嵌套对象:
const originalObj = { "State Names": { "State Cities": { "Los Angeles": { "about": "story", "zip": "91721" } } } };
想要转换后的目标结构:
{ state: { city: [ { "name": "Los Angeles", "about": "story", "zip": "91721" } ] } }
你已经完成了前半部分的嵌套取值,差的就是把城市名称和对应的属性结合起来这一步。核心思路是:拿到城市名称后,要把它作为name字段,再和原对象里的about、zip合并成同一个对象,最后组装成目标结构。
完整的实现代码如下:
const o = { "State Names": { "State Cities": { "Los Angeles": { "about": "story", "zip": "91721" } } } }; // 逐层取出嵌套的城市对象集合 const stateCities = o["State Names"]["State Cities"]; // 遍历城市集合,把城市名和对应属性合并成目标格式的对象 const cityList = Object.keys(stateCities).map(cityName => ({ name: cityName, ...stateCities[cityName] // 展开城市的about、zip等属性 })); // 组装成最终的目标结构 const result = { state: { city: cityList } }; console.log(result);
简单说下关键逻辑:
Object.keys(stateCities)会提取出所有城市名称的数组,这里就是["Los Angeles"]- 用
map遍历每个城市名,创建新对象:把name设为当前城市名,再用扩展运算符...把原城市对象里的属性直接展开进来 - 最后把处理好的城市数组放到
city字段里,再包裹进state对象,就得到了你要的结构
而且这段代码是通用的——如果以后原始对象里有多个城市,它会自动把所有城市都转换成数组里的对象,不用额外修改代码~
内容的提问来源于stack exchange,提问作者test
相关产品推荐
相关产品推荐

