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

按天维度分组过滤JSON数据并生成新对象的技术实现问题

按日期属性对JSON数据按天分组过滤的实现方案

我需要对包含日期属性的JSON数据按天进行分组过滤,生成按天聚合的对象用于后续二次过滤。现有按月份分组的实现代码,但无法复用至按天分组,自己尝试编写的代码未得到预期结果,相关代码如下:

// 模拟API返回数据
const data = [
  { date: "10/01/2023", id: 1 , whatever: "hi" },
  { date: "01/02/2023", id: 2 , whatever: "hello"},
];

// 去重且非空的日期列表
const dtList = ["10/01/2023", "01/02/2023"];

// 按月份分组的示例代码
var months = [
  "Jan",
  "Feb",
  "Mar",
  "Apr",
  "May",
  "Jun"
];
var ordered = {};

// 遍历API数据
for (var i = 0, len = data.length; i < len; i++) {
  var entry = data[i];
  var m = entry.date.substring(0, 10);
  if (m !== "") {
    var mm = parseInt(m.split("/")[1]) - 1;
    if (!ordered[months[mm]]) {
      ordered[months[mm]] = [];
    }
    ordered[months[mm]].push(entry);
  }
}

// 后续二次过滤示例
ordered.Jan?.forEach((obj) => {
  if (!isNaN(obj.nuParc)) {
    nuParcJun += obj.nuParc;
    setNuParcJun(nuParcJun);
  }
});

// 尝试的按天分组代码(未成功)
dtList.forEach((value) => {
  var dtsSep = Data.filter((obj) =>
    obj.date.includes(value)
  );
  var ordered = {};
  var ordered1 = Object.assign(ordered, dtsSep);
});

问题分析

你尝试的按天分组代码存在几个核心问题:

  • 变量名大小写错误:Data应为data(JavaScript区分大小写)
  • 循环内重复声明ordered,导致每次循环都重置对象,无法累积分组结果
  • 使用Object.assign将数组赋值给对象的方式错误,会把数组索引作为对象键,而非目标日期
  • 分组结果未存储到外部可访问的变量中,后续无法调用使用

正确的按天分组实现

提供两种实现方式,可根据需求选择:

方式1:直接对所有数据按天分组

const orderedByDay = {};

data.forEach(entry => {
  const day = entry.date;
  // 如果当前日期对应的数组不存在,初始化空数组
  if (!orderedByDay[day]) {
    orderedByDay[day] = [];
  }
  orderedByDay[day].push(entry);
});

方式2:基于dtList过滤并分组(仅保留指定日期)

const orderedByDay = {};

dtList.forEach(dateKey => {
  // 过滤出当前日期对应的所有数据
  orderedByDay[dateKey] = data.filter(entry => entry.date === dateKey);
});

二次过滤示例

按天分组后,可直接通过日期键访问对应数据并进行二次处理:

// 处理2023年10月1日的数据
orderedByDay["10/01/2023"]?.forEach(obj => {
  if (!isNaN(obj.nuParc)) {
    nuParcOct1 += obj.nuParc;
    setNuParcOct1(nuParcOct1);
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 22:53:15