实现JavaScript函数:按day字段合并多组Worker数组为单个数组
按day聚合多数组数据的实现方案
需求说明
给定三组包含不同工人每日工作数据的数组,需要将它们按day字段作为唯一标识进行聚合,每个day对应的对象整合该日期下所有工人的相关数据,最终生成按day排序的数组。
实现代码
const worker1 = [{day:1, w1:2},{day:2, w1:3},{day:3, w1:1}] const worker2 = [ {day:2, w2:1},{day:3, w2:2}] const worker3 = [{day:1, w3:3} ,{day:2, w3:2}] function aggregateByDay(...arrays) { // 合并所有输入数组为一维数组 const mergedData = arrays.flat(); // 按day字段聚合数据 const dayGroups = mergedData.reduce((acc, current) => { const { day, ...workerData } = current; // 若该day尚未创建分组,初始化基础对象 if (!acc[day]) { acc[day] = { day }; } // 合并当前工人的数据到对应day的分组中 Object.assign(acc[day], workerData); return acc; }, {}); // 将分组对象转换为数组,并按day升序排序 return Object.values(dayGroups).sort((a, b) => a.day - b.day); } // 调用函数生成目标数组 const total = aggregateByDay(worker1, worker2, worker3); console.log(total);
代码解释
- 参数处理:使用
...arrays剩余参数语法,让函数支持传入任意数量的数组,提升通用性。 - 数组合并:
arrays.flat()将所有输入的多维数组扁平化为一维数组,方便后续统一处理。 - 数据聚合:通过
reduce遍历合并后的数据,以day为键构建分组对象。每个分组初始仅包含day字段,后续通过Object.assign合并对应日期下的所有工人数据。 - 排序输出:
Object.values(dayGroups)将分组对象的取值转换为数组,再通过sort方法按day字段从小到大排序,得到最终结果。
内容的提问来源于stack exchange,提问作者Олесь Демчук
相关产品推荐
相关产品推荐

