You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现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);

代码解释

  1. 参数处理:使用...arrays剩余参数语法,让函数支持传入任意数量的数组,提升通用性。
  2. 数组合并:arrays.flat()将所有输入的多维数组扁平化为一维数组,方便后续统一处理。
  3. 数据聚合:通过reduce遍历合并后的数据,以day为键构建分组对象。每个分组初始仅包含day字段,后续通过Object.assign合并对应日期下的所有工人数据。
  4. 排序输出:Object.values(dayGroups)将分组对象的取值转换为数组,再通过sort方法按day字段从小到大排序,得到最终结果。

内容的提问来源于stack exchange,提问作者Олесь Демчук

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:25:18