本文详解如何将嵌套在 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产品图添加背景
相关推荐
xuhaoyu_cpp_java2 小时前
连接池学习shark22222222 小时前
Spring 的三种注入方式?qq_372154232 小时前
如何在 WooCommerce 后台按订单总金额精准筛选订单MmeD UCIZ2 小时前
redis连接服务qq_424098562 小时前
CSS如何让背景图片在容器内居中_使用background-position设为centerLucifer三思而后行2 小时前
Vertica 玩转示例数据库:VMartLucifer三思而后行2 小时前
zCloud 纳管 Oracle 数据库m0_617881422 小时前
如何将扁平数组转换为嵌套树形结构(JavaScript 实现)ATCH IERV2 小时前
MySQL数据库误删恢复_mysql 数据 误删