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

如何将对象数组转换为统一格式的嵌套对象数组(JavaScript)

问题描述

需要将如下结构的JavaScript对象数组:

const input = [
  {
    group: {
      id: "group1",
      groupName: "Group1"
    },
    categories: [
      {
        id: "category11",
        categoryName: "Category 11",
        subCategories: []
      }
    ]
  },
  {
    group: {
      id: "group2",
      groupName: "Group 2"
    },
    categories: [
      {
        id: "category21",
        categoryName: "Category 21",
        subCategories: []
      },
      {
        id: "category22",
        categoryName: "Category 22",
        subCategories: [
          {
            id: "category221",
            categoryName: "Category 221",
            subCategories: []
          }
        ]
      }
    ]
  }
];

转换为统一使用key、name、categories字段的嵌套对象数组,目标格式如下:

const output = [
  {
    key: "group1",
    name: "Group1",
    categories: [
      {
        key: "category11",
        name: "Category 11",
        categories: []
      }
    ]
  },
  {
    key: "group2",
    name: "Group 2",
    categories: [
      {
        key: "category21",
        name: "Category 21",
        categories: []
      },
      {
        key: "category22",
        name: "Category 22",
        categories: [
          {
            key: "category221",
            name: "Category 221",
            categories: []
          }
        ]
      }
    ]
  }
];

目前已实现第一层格式转换,但无法处理深层嵌套结构,现有代码:

const output = arr.map((item) => {
  return {
    key: item.group.id,
    name: item.group.groupName,
    categories: [{ ...item }]
  };
});
解决方案

可以通过递归函数处理所有层级的嵌套转换,具体实现如下:

// 定义递归函数,处理单个分类/子分类的转换
function convertCategory(category) {
  return {
    key: category.id,
    name: category.categoryName,
    // 递归处理子分类,将subCategories转为categories
    categories: category.subCategories.map(convertCategory)
  };
}

// 处理根节点数组
const output = input.map(item => ({
  key: item.group.id,
  name: item.group.groupName,
  // 调用递归函数转换所有分类
  categories: item.categories.map(convertCategory)
}));

代码说明:

  1. convertCategory函数:接收单个分类对象,将其id转为key,categoryName转为name,并递归处理subCategories数组,将每个子分类转换后存入categories字段。
  2. 根节点处理:遍历原数组,将每个根节点的group.id和group.groupName映射为key和name,再用convertCategory转换整个categories数组。

这样就能完整处理所有层级的嵌套结构,得到符合要求的输出。

内容的提问来源于stack exchange,提问作者user16860065

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:42:06