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

JS Array Reduce实现多键匹配对象计数及cat/subCat嵌套分组

数组分组计数去重实现方案

你可以直接使用如下修改后的reduce逻辑,即可满足需求:

const formatedObjects = Object.values(objects.reduce((acc, item) => {
    const { cat, subCat } = item;
    // 提取当前项用于匹配的三个关键字段
    const matchName = item.name;
    const matchShadowColor = item.shadowColor ?? null;
    const matchWattageVal = item.wattage?.value ?? null;

    // 初始化cat层级分组
    if (!acc[cat]) {
        acc[cat] = {
            cat,
            children: []
        }
    }

    // 查找当前cat下对应的subCat分组
    let subGroup = acc[cat].children.find(g => g.subCat === subCat);
    // 不存在则新增subCat分组
    if (!subGroup) {
        subGroup = {
            subCat,
            children: []
        };
        acc[cat].children.push(subGroup);
    }

    // 在subCat分组内查找三个字段完全匹配的已有条目
    const existItem = subGroup.children.find(i => {
        return i.name === matchName 
            && i.shadowColor === matchShadowColor 
            && i.wattage?.value === matchWattageVal
    });

    if (existItem) {
        // 匹配到已有条目直接累加计数
        existItem.count += 1;
    } else {
        // 无匹配条目则新增,count初始值为1
        subGroup.children.push({
            cat,
            subCat,
            name: matchName,
            title: item.title,
            shadowColor: matchShadowColor,
            wattage: item.wattage ?? null,
            count: 1
        })
    }

    return acc;
}, {}))

核心修改说明

  1. 新增内层匹配逻辑:在subCat分组的children中,按name、shadowColor、wattage.value三个字段匹配已有条目,避免重复生成对象,匹配成功直接累加count字段
  2. 补全了内层对象缺失的cat、subCat字段,和预期输出结构完全对齐
  3. 最后通过Object.values()将reduce生成的分组对象转换为数组,符合你要求的最终输出格式
  4. 使用空值合并运算符??简化了空值兜底判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:45:04