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

如何按颜色与尺寸筛选数据并汇总对应数量

解决按颜色/尺寸汇总数量的问题

你现在的代码只提取了颜色列表,要实现按颜色和尺寸分别汇总数量的需求,我们可以利用数组的flatMap和reduce方法来完成,下面是具体的实现方案:

步骤1:提取所有属性项

首先我们需要把所有产品的属性项从嵌套结构中提取出来,得到一个平铺的属性数组:

const data = [
  {
    id: 1,
    name: "Product A",
    attributes: [
      { color: "Red", size: "Small", qty: 200 },
      { color: "Red", size: "Medium", qty: 100 },
      { color: "Red", size: "Large", qty: 300 },
      { color: "Yellow", size: "Small", qty: 200 },
      { color: "Yellow", size: "Medium", qty: 100 },
      { color: "Yellow", size: "Large", qty: 300 },
    ],
  },
];

// 提取所有平铺的属性项
const allAttributes = data.flatMap(product => product.attributes);

步骤2:按颜色汇总数量

我们用reduce方法遍历属性数组,以颜色为键累加数量,最后把结果对象的数值提取成数组:

// 按颜色汇总
const colorTotalMap = allAttributes.reduce((acc, item) => {
  // 如果当前颜色还没在累加对象里,初始化为0
  if (!acc[item.color]) {
    acc[item.color] = 0;
  }
  // 累加数量
  acc[item.color] += item.qty;
  return acc;
}, {});

// 转换为你需要的数组格式 [600, 600]
const colorTotalArray = Object.values(colorTotalMap);
console.log("按颜色汇总结果:", colorTotalArray); // 输出 [600, 600]

步骤3:按尺寸汇总数量

逻辑和按颜色汇总完全一致,只是把键从color换成size。这里要注意:如果需要严格按照小号、中号、大号的顺序返回结果,最好手动指定顺序提取值(避免Object.values的顺序不确定性):

// 按尺寸汇总
const sizeTotalMap = allAttributes.reduce((acc, item) => {
  if (!acc[item.size]) {
    acc[item.size] = 0;
  }
  acc[item.size] += item.qty;
  return acc;
}, {});

// 按指定顺序转换为数组格式 [400, 200, 600]
const sizeTotalArray = ["Small", "Medium", "Large"].map(size => sizeTotalMap[size]);
console.log("按尺寸汇总结果:", sizeTotalArray); // 输出 [400, 200, 600]

把这些代码整合在一起,就能得到你期望的两个汇总数组啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:02:28