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

如何用Lodash按dayNumber将数组分组为指定嵌套结构?

按dayNumber字段分组为嵌套结构(Lodash实现)

原始数据

[
  {
    "Pnl": 29.0035635,
    "date": "11/14/2022",
    "dayNumber": 1,
    "translationDayOfWeek": "Monday"
  },
  {
    "Pnl": 50.8878545,
    "date": "11/08/2022",
    "dayNumber": 2,
    "translationDayOfWeek": "Tuesday"
  },
  {
    "Pnl": 73.1014552,
    "date": "11/08/2022",
    "dayNumber": 2,
    "translationDayOfWeek": "Tuesday"
  },
  {
    "Pnl": 32.477,
    "date": "11/08/2022",
    "dayNumber": 6,
    "translationDayOfWeek": "Saturday"
  },
  {
    "Pnl": 25.43999561,
    "date": "09/30/2022",
    "dayNumber": 5,
    "translationDayOfWeek": "Friday"
  },
  {
    "Pnl": 17.6294068,
    "date": "09/30/2022",
    "dayNumber": 1,
    "translationDayOfWeek": "Monday"
  }
]

期望输出

[
  {
    "dayNumber": 1,
    "orders": [
      {
        "Pnl": 29.0035635,
        "date": "11/14/2022",
        "dayNumber": 1,
        "translationDayOfWeek": "Monday"
      },
      {
        "Pnl": 17.6294068,
        "date": "09/30/2022",
        "dayNumber": 1,
        "translationDayOfWeek": "Monday"
      }
    ]
  },
  {
    "dayNumber": 2,
    "orders": [
      {
        "Pnl": 50.8878545,
        "date": "11/08/2022",
        "dayNumber": 2,
        "translationDayOfWeek": "Tuesday"
      },
      {
        "Pnl": 73.1014552,
        "date": "11/08/2022",
        "dayNumber": 2,
        "translationDayOfWeek": "Tuesday"
      }
    ]
  }
]

实现方案

结合Lodash的_.groupBy()和_.map()方法即可完成需求,步骤如下:

  1. 用_.groupBy()按dayNumber字段对原始数组分组,得到以dayNumber为键、对应数据数组为值的对象
  2. 用_.map()遍历分组后的对象,转换成包含dayNumber和orders的目标结构

代码示例:

const _ = require('lodash');

const originalData = [/* 上述原始数据数组 */];

// 基础分组转换
const groupedData = _.map(_.groupBy(originalData, 'dayNumber'), (orders, dayNumber) => ({
  dayNumber: parseInt(dayNumber, 10),
  orders
}));

// 如果需要只保留包含多条订单的分组(匹配示例输出)
const filteredGroupedData = groupedData.filter(item => item.orders.length > 1);

console.log(filteredGroupedData);

代码说明

  • _.groupBy(originalData, 'dayNumber'):将原始数组按dayNumber分组,返回{ '1': [...], '2': [...] }格式的对象
  • _.map(...):遍历分组后的对象,把字符串类型的dayNumber转为数字,同时将对应数据数组赋值给orders字段,生成目标格式的数组
  • 后续的filter方法可选,用于筛选出包含多条订单的分组,和示例输出一致

内容的提问来源于stack exchange,提问作者ChahinDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:40:39