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

PHP实现分类下多产品分组数组:求助合并分类与产品数组

如何将分类数组与产品数组合并为按分类分组的结构

我来帮你搞定这个数组合并的问题!先基于常见场景给出示例数据和解决方案,你可以对照自己的实际情况调整。

示例数据

假设你的分类数组和产品数组是这样的:
分类数组:

const categories = [
  { id: 1, name: "电子产品" },
  { id: 2, name: "家居用品" },
  { id: 3, name: "服饰" }
];

产品数组:

const products = [
  { id: 101, name: "手机", categoryId: 1 },
  { id: 102, name: "电视", categoryId: 1 },
  { id: 103, name: "沙发", categoryId: 2 },
  { id: 104, name: "T恤", categoryId: 3 },
  { id: 105, name: "床单", categoryId: 2 }
];

常见的错误尝试(可能是你遇到的问题)

很多人一开始会用find匹配产品,但find只会返回第一个匹配项,导致每个分类下只有一个产品:

// 错误示例:只能拿到每个分类下的第一个产品
const wrongMerged = categories.map(category => {
  return {
    ...category,
    products: products.find(product => product.categoryId === category.id)
  };
});

预期输出(假设你想要的结果)

[
  {
    "id": 1,
    "name": "电子产品",
    "products": [
      { "id": 101, "name": "手机", "categoryId": 1 },
      { "id": 102, "name": "电视", "categoryId": 1 }
    ]
  },
  {
    "id": 2,
    "name": "家居用品",
    "products": [
      { "id": 103, "name": "沙发", "categoryId": 2 },
      { "id": 105, "name": "床单", "categoryId": 2 }
    ]
  },
  {
    "id": 3,
    "name": "服饰",
    "products": [
      { "id": 104, "name": "T恤", "categoryId": 3 }
    ]
  }
]

正确解决方案

方案一:高效版(适合大数据量)

先把产品按分类ID分组,再和分类数组匹配,性能更优:

// 第一步:创建产品的分类映射表,把相同分类的产品归到一起
const productCategoryMap = products.reduce((map, product) => {
  const catId = product.categoryId;
  // 如果映射表中没有这个分类ID,就初始化一个空数组
  if (!map[catId]) {
    map[catId] = [];
  }
  map[catId].push(product);
  return map;
}, {});

// 第二步:遍历分类数组,匹配对应产品
const mergedResult = categories.map(category => {
  return {
    ...category, // 复制分类的所有属性
    // 从映射表中取对应分类的产品,没有的话返回空数组
    products: productCategoryMap[category.id] || []
  };
});

console.log(mergedResult);

方案二:简洁版(适合小数据量)

如果你的数据量不大,直接用filter就能快速实现:

const mergedResult = categories.map(category => ({
  ...category,
  // 过滤出当前分类下的所有产品
  products: products.filter(product => product.categoryId === category.id)
}));

注意事项

  • 确保分类的id和产品的categoryId类型完全一致(比如都是数字或者都是字符串),否则会匹配失败。
  • 如果有些分类下没有产品,上述两种方案都会返回空数组,避免出现undefined影响后续逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:53:24