如何遍历嵌套对象NodeClassification并转换为指定结构的对象数组
嵌套对象转换为指定结构数组的正确实现
问题背景
现有嵌套对象NodeClassification,结构如下:
- 一级键为Vendor名称(如
Mobile、MobileRAN) - 二级键为分组名称(如
NORMAL、VIP、CRITICAL) - 每个分组下包含
DownCount字段
需要将其转换为对象数组,每个元素必须包含三个字段:
group:分组名称key:Vendor名称value:对应分组的DownCount值
用户原代码仅能提取每个Vendor下的第一个分组数据,无法遍历所有嵌套内容,目标数组结构示例:
[ { group: 'NORMAL', key: 'Mobile', value: 2 }, { group: 'VIP', key: 'Mobile', value: 2 }, { group: 'NORMAL', key: 'MobileRAN', value: 4 }, { group: 'VIP', key: 'MobileRAN', value: 4 }, { group: 'CRITICAL', key: 'MobileRAN', value: 4 } ]
原代码问题分析
原代码中使用Object.keys(x)[0]和Object.values(x)[0]仅获取了每个Vendor下的第一个分组,直接忽略了后续的分组数据,导致转换结果不完整。
正确实现方案
方案1:嵌套for循环(直观易懂)
// 示例输入数据 const NodeClassification = { Mobile: { NORMAL: { DownCount: 2 }, VIP: { DownCount: 2 } }, MobileRAN: { NORMAL: { DownCount: 4 }, VIP: { DownCount: 4 }, CRITICAL: { DownCount: 4 } } }; const netArr = []; // 遍历所有Vendor for (const [vendorName, groups] of Object.entries(NodeClassification)) { // 遍历当前Vendor下的所有分组 for (const [groupName, groupData] of Object.entries(groups)) { netArr.push({ group: groupName, key: vendorName, value: groupData.DownCount }); } } console.log(netArr);
方案2:flatMap链式写法(简洁高效)
const NodeClassification = { Mobile: { NORMAL: { DownCount: 2 }, VIP: { DownCount: 2 } }, MobileRAN: { NORMAL: { DownCount: 4 }, VIP: { DownCount: 4 }, CRITICAL: { DownCount: 4 } } }; const netArr = Object.entries(NodeClassification).flatMap(([vendorName, groups]) => { // 映射每个Vendor下的分组,再通过flatMap扁平化嵌套数组 return Object.entries(groups).map(([groupName, groupData]) => ({ group: groupName, key: vendorName, value: groupData.DownCount })); }); console.log(netArr);
两种方案核心逻辑一致:先遍历一级所有Vendor,再遍历每个Vendor下的所有分组,将每个分组转换为目标结构的对象并收集到结果数组中,确保所有嵌套内容都被完整处理。
内容的提问来源于stack exchange,提问作者abhijit bakshi
相关产品推荐
相关产品推荐

