本文详解如何将嵌套在 keyResults 和 metrics 中的对象按 product 字段统一归类生成结构清晰、按产品聚合的新对象数组适用于数据聚合、报表生成等典型场景。 本文详解如何将嵌套在 keyresults 和 metrics 中的对象按 product 字段统一归类生成结构清晰、按产品聚合的新对象数组适用于数据聚合、报表生成等典型场景。在实际开发中常需将分散在多个子数组如 keyResults、metrics中的对象依据某个公共字段如 product进行逻辑分组并保持原始结构语义——即每个产品对应独立的 keyResults 和 metrics 子数组。这并非简单的数组扁平化或排序而是跨字段的键驱动聚合key-based cross-array grouping。核心思路是? 遍历所有目标子数组keyResults 和 metrics? 提取每项的 product 值作为分组键? 使用普通对象{}作为临时哈希表以 product 为 key 存储分组结果? 每次遇到新 product 时初始化其结构含空 keyResults 和 metrics 数组? 将当前项推入对应 product 下的对应子数组? 最终通过 Object.values() 转为标准数组消除键名依赖符合预期输出格式。以下为完整可运行实现const a { products: { keyResults: [ { leader: Aaron, product: Product 1 }, { leader: Addie, product: Product 1 }, { leader: Mindy, product: Product 1 }, { leader: Wiley, product: Product 2 } ], metrics: [ { leader: Aaron, product: Product 1 }, { leader: Wiley, product: Product 2 } ] }};// 步骤 1创建分组哈希表const groupedByProduct {};// 步骤 2遍历 keyResults 和 metrics 两个字段for (const category of [keyResults, metrics]) { const items a.products[category]; if (!Array.isArray(items)) continue; for (const item of items) { const productId item.product; // 若该 product 尚未初始化则创建默认结构 if (!groupedByProduct[productId]) { groupedByProduct[productId] { product: productId, keyResults: [], metrics: [] }; } // 将当前 item 推入对应 category 的子数组 groupedByProduct[productId][category].push(item); }}// 步骤 3转换为 products 数组const b { products: Object.values(groupedByProduct)};console.log(b);// 输出结构完全匹配预期每个 product 对应独立的 keyResults/metrics 数组? 关键注意事项 Mokker AI AI产品图添加背景