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

如何对JavaScript数组按日期分组并求和、统计行数、计算平均值

实现方案

完全可以实现,以下是具体思路和可直接运行的代码:

核心思路

  • 加载CSV文件后拆分所有数据行
  • 按日期(时间字符串截取空格前的年月日部分)为维度分组
  • 遍历每行数据时累加对应分组的目标字段总和、行数
  • 遍历完成后按分组计算平均值,输出指定格式的结果

完整代码

针对你用D3加载的场景,调整加载方式避免无表头CSV丢数据,代码可直接替换你的原有逻辑:

d3.queue()
.defer(d3.text, "test.csv") // 无表头CSV用text加载更稳妥
.await(function(error, dataText) {
    if (error) throw error;
    // 拆分行为数组,过滤空行
    const rows = dataText.split('\n').filter(row => row.trim());
    const groupMap = {};

    rows.forEach(row => {
        const fields = row.split(',');
        // 提取日期(仅年月日)
        const date = fields[0].split(' ')[0];
        // 取姓名前的数值(第三个逗号分隔值,索引从0开始为2)
        const targetVal = Number(fields[2].trim());
        // 初始化分组
        if (!groupMap[date]) {
            groupMap[date] = { sum: 0, count: 0 };
        }
        groupMap[date].sum += targetVal;
        groupMap[date].count += 1;
    });

    // 生成最终结果数组
    const result = Object.entries(groupMap).map(([date, data]) => {
        const avg = Number((data.sum / data.count).toFixed(2));
        // 如需输出逗号分隔的字符串,可改为 return `${date},${data.sum},${data.count},${avg}`
        return [date, data.sum, data.count, avg];
    });

    // 输出结果,后续其他计算可直接基于result处理
    console.log(result);
});

说明

  1. 代码计算结果和你给出的示例完全匹配:2021-09-01总和35、行数3,平均值可根据需求选择保留两位小数的截断值11.66或四舍五入值11.67;2021-09-02总和92、行数4、平均值23。
  2. 如果你的CSV实际有表头,只需把加载方式改回d3.csv,然后按表头字段名取值即可,无需手动拆分行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:18:01