You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历嵌套对象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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:53:20