0

0

如何在 Node.js 中按公共字段合并多个嵌套数组中的数据

聖光之護

聖光之護

发布时间:2026-01-12 12:15:42

|

111人浏览过

|

来源于php中文网

原创

如何在 Node.js 中按公共字段合并多个嵌套数组中的数据

本文介绍如何将多层嵌套的用户数组(如按班级分组的二维数组)扁平化后,按 `class_id` 聚合学生信息,生成结构清晰的分组对象数组。核心方法是结合 `array.prototype.flat()` 与 `reduce()` 构建键值映射,再通过 `object.values()` 提取结果。

在 Node.js(或现代浏览器环境)中处理类似「多维数组按字段归并」的需求时,常见误区是直接遍历外层数组、手动维护索引或依赖固定结构(如假设每组只含单一 class_id),这会导致逻辑脆弱、难以应对混合班级数据(例如第二组同时包含 "Grade 2" 和 "Grade 3")。正确解法应忽略原始嵌套层级,聚焦数据语义:所有学生对象均需按 class_id 分组,每个分组内仅保留 roll_number 和 name 字段。

✅ 推荐实现:flat() + reduce() + 对象映射

以下为健壮、可读性强且兼容 Node.js 12+ 的解决方案:

const data = [
  [
    { class_id: "Grade 1", roll_number: "1", name: "alex" },
    { class_id: "Grade 1", roll_number: "2", name: "bob" },
  ],
  [
    { class_id: "Grade 2", roll_number: "7", name: "peter" },
    { class_id: "Grade 3", roll_number: "6", name: "lia" },
    { class_id: "Grade 2", roll_number: "5", name: "mary" },
    { class_id: "Grade 3", roll_number: "1", name: "violet" },
  ],
];

const result = data
  .flat() // 将二维数组展平为一维:[{...}, {...}, {...}, ...]
  .reduce((acc, student) => {
    const { class_id, roll_number, name } = student;

    // 若 acc 中尚无该 class_id 对应的分组,则初始化
    acc[class_id] ??= { class_id, students: [] };

    // 将精简后的学生信息推入对应分组
    acc[class_id].students.push({ roll_number, name });

    return acc;
  }, {});

// 转换为最终所需的数组格式
console.log(Object.values(result));

输出结果:

Packify
Packify

Packify 是一个创新的AI包装设计工具

下载
[
  {
    "class_id": "Grade 1",
    "students": [
      { "roll_number": "1", "name": "alex" },
      { "roll_number": "2", "name": "bob" }
    ]
  },
  {
    "class_id": "Grade 2",
    "students": [
      { "roll_number": "7", "name": "peter" },
      { "roll_number": "5", "name": "mary" }
    ]
  },
  {
    "class_id": "Grade 3",
    "students": [
      { "roll_number": "6", "name": "lia" },
      { "roll_number": "1", "name": "violet" }
    ]
  }
]

⚠️ 注意事项与优化建议

  • 兼容性兜底:若需支持 Node.js
  • 字段容错:生产环境中建议增加空值校验,例如:
    if (!class_id || typeof class_id !== 'string') return acc; // 跳过非法项
  • 性能考量:该方案时间复杂度为 O(n),空间复杂度为 O(m)(m 为唯一 class_id 数量),适用于万级以内学生数据;超大数据集可考虑流式处理或分批聚合。
  • 扩展性提示:如需支持多级嵌套(如三维数组),可递归调用 flat(Infinity) 或自定义扁平化函数。

此方法摆脱了对原始数组结构的强依赖,以数据驱动逻辑,简洁、可靠且易于维护,是处理同类聚合需求的标准实践。

相关专题

更多
php中三维数组怎样求和
php中三维数组怎样求和

php中三维数组求和的方法:1、创建一个php示例文件;2、定义一个名为“$total”的变量,用于记录累加的结果。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

92

2024.02.23

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

253

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5266

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

475

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.04

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

217

2023.09.14

Java 项目构建与依赖管理(Maven / Gradle)
Java 项目构建与依赖管理(Maven / Gradle)

本专题系统讲解 Java 项目构建与依赖管理的完整体系,重点覆盖 Maven 与 Gradle 的核心概念、项目生命周期、依赖冲突解决、多模块项目管理、构建加速与版本发布规范。通过真实项目结构示例,帮助学习者掌握 从零搭建、维护到发布 Java 工程的标准化流程,提升在实际团队开发中的工程能力与协作效率。

3

2026.01.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号