JavaScript 中按字段对嵌套对象数组进行分组的实用教程

本文详解如何将嵌套在 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.productscategory; if (!Array.isArray(items)) continue; for (const item of items) { const productId = item.product; // 若该 product 尚未初始化,则创建默认结构 if (!groupedByProductproductId) { groupedByProductproductId = { product: productId, keyResults: \[\], metrics: \[\] }; } // 将当前 item 推入对应 category 的子数组 groupedByProductproductIdcategory.push(item); }}// 步骤 3:转换为 products 数组const b = { products: Object.values(groupedByProduct)};console.log(b);// 输出结构完全匹配预期:每个 product 对应独立的 keyResults/metrics 数组? 关键注意事项: Mokker AI AI产品图添加背景

相关推荐
探物 AI6 小时前
把 MambaOut 塞进 YOLOv11:会有什么样的反应
python·yolo·计算机视觉
cfm_29146 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
如竟没有火炬6 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
阳区欠6 小时前
【LangChain】LLM基础介绍
开发语言·python·langchain
Cosolar6 小时前
保姆级 CrewAI 教程:从零构建多智能体协作系统
人工智能·python·架构
GDAL7 小时前
使用 uv 管理 Python 版本
python·uv·版本
真实的菜7 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
你想考研啊7 小时前
mysql数据库导出导入
数据库·mysql·oracle
cup117 小时前
[开源] Meta Assistant / 告别命令行,我为一堆 Python 脚本做了一个 Windows 任务栏的“家”
windows·python·工具·nuitka·脚本运行
十年编程老舅8 小时前
Linux DRM:底层逻辑与实践架构
数据库·mysql