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

按日期属性分组JSON数组后如何访问分组对象?

按日期属性分组JSON数组后如何访问分组对象?

嘿,我看你用groupBy函数把数组按日期分组后,卡在了访问分组对象的步骤上。首先纠正一个点:o["02/28/2024"]这个写法其实是完全正确的!你说它不行,大概率是试的时候不小心犯了小错误——比如把英文引号写成中文的了?或者日期字符串和对象里实际的键拼写不一致?

先给你明确几种正确的访问方式:

1. 直接用方括号访问指定日期的数组

因为你的日期键里有斜杠、且以数字开头,不符合JavaScript标识符的规则,所以不能用.点语法,必须用方括号包裹字符串形式的键名:

// 直接获取2024年2月28日的所有数据
const feb28Records = o["02/28/2024"];
// 打印看看,就能拿到对应的15条数据了
console.log(feb28Records);

2. 遍历所有日期分组

如果你不确定所有的日期键,或者需要批量处理每个日期的数据,可以用Object.keys()先取出所有日期,再逐个访问:

// 获取所有分组的日期键
const allDates = Object.keys(o);

// 遍历每个日期,处理对应的数据
allDates.forEach(date => {
  const records = o[date];
  console.log(`处理日期 ${date} 的数据,共 ${records.length} 条`);
  // 这里可以写你的业务逻辑,比如渲染图表、统计数量等
});

3. 改进groupBy函数,返回更易操作的数组格式

如果觉得对象形式的分组不好处理,你可以修改一下groupBy函数,让它返回数组格式的分组结果,每个元素包含日期和对应的数据数组,这样访问起来更直观:

function groupBy(arr, property) {
  // 先按原逻辑分组得到对象
  const groupedObj = arr.reduce((memo, item) => {
    const key = item[property];
    if (!memo[key]) {
      memo[key] = [];
    }
    memo[key].push(item);
    return memo;
  }, {});
  
  // 把对象转换成数组,每个元素是{ date: 日期值, data: 对应数据数组 }
  return Object.entries(groupedObj).map(([date, data]) => ({
    date,
    data
  }));
}

调用这个改进后的函数后,你会得到这样的结果:

[
  { date: '02/28/2024', data: [/* 15条数据 */] },
  { date: '02/29/2024', data: [/* 9条数据 */] }
]

之后你就可以像操作普通数组一样,用索引或者forEach来访问每个分组的数据啦!


备注:内容来源于stack exchange,提问作者NoBullMan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:53:06