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

Angular2中如何合并Firebase返回的同日期多对象为单对象?

合并Firebase返回的同日期数据数组

嘿,这个合并相同日期数据的需求不难搞定,我给你梳理个清晰的解法!

首先明确我们要达成的目标:把Firebase返回的包含重复日期的对象数组,按日期分组,每个日期对应一个独立对象,其中date属性保留不变,相关的数值字段(比如paidAmount和purpose)都存入该对象的data数组中。

解法思路

核心逻辑就是按日期分组归集:先用一个临时对象暂存每个日期对应的数据,遍历原始数组时,把相同日期的项都归集到同一个日期的data数组里,最后再把这个临时对象转换成我们需要的数组格式。

代码实现(JavaScript)

假设这是你从Firebase获取的原始数据:

// 模拟Firebase返回的原始数据
const rawFirebaseData = [
  { date: "21/02/2018", paidAmount: 850, purpose: "Medicine" },
  { date: "21/02/2018", paidAmount: 100, purpose: "Treatment" },
  { date: "21/02/2018", paidAmount: 200, purpose: "Treatment" },
  { date: "20/02/2018", paidAmount: 400, purpose: "Consultation" }
];

接下来是具体的合并逻辑:

// 创建临时对象用于按日期分组
const dateGroups = {};

// 遍历原始数据进行分组处理
rawFirebaseData.forEach(item => {
  // 解构分离出日期字段和其余数据
  const { date, ...details } = item;
  
  // 如果当前日期还未初始化分组,先创建对应的结构
  if (!dateGroups[date]) {
    dateGroups[date] = { date, data: [] };
  }
  
  // 将当前项的详细数据添加到对应日期的data数组中
  dateGroups[date].data.push(details);
});

// 将分组对象转换为最终的数组格式
const mergedData = Object.values(dateGroups);

// 输出结果,就是你想要的格式啦!
console.log(mergedData);

代码说明

  • 用forEach遍历原始数组,通过解构赋值把date和其他业务字段快速分开;
  • 临时对象dateGroups以日期字符串为键,每个键对应的值是包含date和data数组的对象;
  • 每次遍历到一个项,就把它的非日期字段(paidAmount和purpose)push到对应日期的data数组里;
  • 最后用Object.values()把临时对象的所有值提取出来,转换成数组,就是合并后的最终结果。

额外提示

如果你的Firebase返回的日期格式存在不一致(比如有的是21/02/2018,有的是2018-02-21),建议先统一日期格式,再进行分组操作,避免因为格式差异导致相同日期被当成不同键处理。比如可以用Date对象把日期转换成统一的ISO字符串格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:00:01