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

重构电商分类与子分类的JavaScript对象数组

将扁平电商分类数组转换为层级嵌套结构

要实现把带parentId的扁平分类数组转换成嵌套结构(根分类parentId为空,子分类归入父分类的subCategories数组),可以用基于Map的高效方案,支持任意深度的嵌套:

实现代码

function nestCategories(flatCategories) {
  const categoryMap = new Map();
  const nestedCategories = [];

  // 将所有分类存入Map,同时初始化subCategories数组
  flatCategories.forEach(category => {
    categoryMap.set(category.id, { ...category, subCategories: [] });
  });

  // 遍历分类,将子分类归入对应父分类的subCategories
  flatCategories.forEach(category => {
    const current = categoryMap.get(category.id);
    if (category.parentId === '') {
      nestedCategories.push(current);
    } else {
      const parent = categoryMap.get(category.parentId);
      if (parent) {
        parent.subCategories.push(current);
      }
    }
  });

  return nestedCategories;
}

// 测试输入
const inputCategories = [
  {id:1, name:'Electronics', parentId:''},
  {id:2, name:'Devices', parentId:1},
  {id:3, name:'Mobile Phones', parentId:2},
  {id:4, name:'TV', parentId:2},
  {id:5, name:'Accessories', parentId:1},
  {id:6, name:'Beauty', parentId:''},
];

// 生成嵌套结果
const nestedCategories = nestCategories(inputCategories);
console.log(nestedCategories);

代码说明

  1. Map存储优化:用Map存储所有分类,key为分类id,查找父分类的时间复杂度为O(1),比遍历数组查找高效得多,尤其适合大量分类的场景。
  2. 初始化subCategories:复制原分类对象并添加空的subCategories数组,避免后续判断数组是否存在。
  3. 构建嵌套结构:
    • 根分类(parentId为空)直接加入结果数组。
    • 非根分类通过parentId找到父分类,将自身添加到父分类的subCategories中。

支持深层嵌套

如果新增分类{id:7, name:'Smart TV', parentId:4},运行代码后该分类会自动归入id:4(TV)的subCategories数组中,完美支持多层级嵌套。

内容的提问来源于stack exchange,提问作者kazi nur hossain tipu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:18:23