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

如何将扁平二维数组转换为嵌套对象?初学者求实现方案

数组转嵌套分类对象实现方案

直接上可运行的JavaScript代码,能完美实现你要的嵌套分类结构:

const newCat = [
  ["Grocery", "Food & Drink", "Snacks, Crisps and Sweets"],
  ["Grocery", "Canned, Dry & Packaged Food", "Pickled Foods"],
  ["Grocery", "Food & Drink"],
  ["Grocery", "Food & Drink", "Nuts, Dates & Dried Fruits"],
  ["Grocery", "World Specialities", "India"],
];

function buildNestedCategories(arr) {
  const result = [];
  
  arr.forEach(categoryPath => {
    let currentLevel = result;
    
    categoryPath.forEach((name, index) => {
      // 检查当前层级是否已有同名分类
      let existingCategory = currentLevel.find(item => item.CategoryName === name);
      
      if (!existingCategory) {
        // 不存在则新建分类对象,仅非最后一级添加SubCategories
        existingCategory = { CategoryName: name };
        if (index !== categoryPath.length - 1) {
          existingCategory.SubCategories = [];
        }
        currentLevel.push(existingCategory);
      }
      
      // 切换到下一层级(如果有子分类的话)
      currentLevel = existingCategory.SubCategories || [];
    });
  });
  
  return result;
}

// 生成嵌套结构
const nestedCategories = buildNestedCategories(newCat);
// 格式化输出查看结果
console.log(JSON.stringify(nestedCategories, null, 2));

代码逻辑拆解

  • 初始化容器:result数组用来存放最顶层的分类(比如示例里的"Grocery")。
  • 遍历每条分类路径:对每个层级数组(比如["Grocery", "Food & Drink", ...])进行处理。
  • 层级追踪:用currentLevel变量记录当前操作的分类层级,从根目录开始逐步深入。
  • 检查并创建分类:
    • 用find方法检查当前层级是否已有同名分类,避免重复创建。
    • 新建分类时,只有当该分类不是路径的最后一级时,才添加SubCategories空数组(最后一级分类没有子分类)。
  • 层级切换:处理完当前分类后,把currentLevel切换到该分类的SubCategories,继续处理下一级分类。

运行代码后,你会得到完整的嵌套结构,包含所有示例里的分类,比如"World Specialities"和对应的"India",以及"Food & Drink"下的"Nuts, Dates & Dried Fruits"都会被正确添加进去。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:54:17