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

如何用JavaScript从JSON数据库提取各省份累计病例最大值

如何用JavaScript从加拿大省份疾病通报数据中获取各省份累计病例最大值?

问题描述

我有一个存储加拿大省份疾病通报累计数据的JSON数据集,每条数据包含Province(省份)、Number of cases(新增病例数)、Cumulative number(累计病例数)字段,示例数据如下:

const diseaseData = [
  { Province: "Quebec", "Number of cases": 1, "Cumulative number": 1 },
  { Province: "Ontario", "Number of cases": 2, "Cumulative number": 2 },
  { Province: "Quebec", "Number of cases": 1, "Cumulative number": 2 },
  { Province: "Quebec", "Number of cases": 1, "Cumulative number": 3 },
  { Province: "BC", "Number of cases": 4, "Cumulative number": 4 },
  { Province: "BC", "Number of cases": 1, "Cumulative number": 5 }
];

我需要得到每个省份的累计病例最大值,期望输出结果为:

Quebec        3
Ontario       2
BC            5

我编码经验较少,想请教如何用JavaScript实现该需求,同时不确定以下三种方式哪种更合适:

  • 累加新增病例数;
  • 提取各省份累计病例的最大值;
  • 选取各省份最后一条数据记录。

三种方式的适用性分析

  • 方式1:累加新增病例数:仅适合需要验证累计病例数字段准确性的场景,如果数据集本身的累计值是可靠的,这种方式属于冗余计算,没必要使用。
  • 方式2:提取各省份累计病例的最大值:这是最直接匹配需求的方式,不管数据排序如何,只要遍历所有记录就能准确拿到每个省份的累计最大值,适用性最强。
  • 方式3:选取各省份最后一条数据记录:仅当数据严格按时间顺序排列(最新记录在最后),且最后一条记录的累计值就是最大值时有效,数据顺序混乱的话结果会出错。

JavaScript实现代码

推荐:方式2(提取累计最大值)

使用reduce方法遍历数据,维护一个存储各省份最大累计值的对象:

const diseaseData = [
  { Province: "Quebec", "Number of cases": 1, "Cumulative number": 1 },
  { Province: "Ontario", "Number of cases": 2, "Cumulative number": 2 },
  { Province: "Quebec", "Number of cases": 1, "Cumulative number": 2 },
  { Province: "Quebec", "Number of cases": 1, "Cumulative number": 3 },
  { Province: "BC", "Number of cases": 4, "Cumulative number": 4 },
  { Province: "BC", "Number of cases": 1, "Cumulative number": 5 }
];

// 计算各省份累计病例最大值
const maxCumulativeByProvince = diseaseData.reduce((acc, current) => {
  const province = current.Province;
  const currentCumulative = current["Cumulative number"];
  // 若省份未记录,或当前累计值大于已存最大值则更新
  if (!acc[province] || currentCumulative > acc[province]) {
    acc[province] = currentCumulative;
  }
  return acc;
}, {});

// 格式化输出结果
for (const [province, maxCumulative] of Object.entries(maxCumulativeByProvince)) {
  console.log(`${province.padEnd(12)} ${maxCumulative}`);
}

运行后输出:

Quebec       3
Ontario      2
BC           5

可选:方式3(数据有序时取最后一条)

如果数据是按时间顺序排列的,可直接覆盖省份的累计值,最后一次赋值即为最新累计值:

const latestCumulativeByProvince = diseaseData.reduce((acc, current) => {
  acc[current.Province] = current["Cumulative number"];
  return acc;
}, {});

// 输出结果
for (const [province, cumulative] of Object.entries(latestCumulativeByProvince)) {
  console.log(`${province.padEnd(12)} ${cumulative}`);
}

可选:方式1(累加新增病例验证)

若需要通过新增病例数计算累计值,可使用以下代码:

const cumulativeSumByProvince = diseaseData.reduce((acc, current) => {
  const province = current.Province;
  const newCases = current["Number of cases"];
  // 初始化或累加新增病例数
  acc[province] = (acc[province] || 0) + newCases;
  return acc;
}, {});

// 输出结果
for (const [province, sum] of Object.entries(cumulativeSumByProvince)) {
  console.log(`${province.padEnd(12)} ${sum}`);
}

注意:这种方式的结果和前两种一致的前提是,数据中的累计病例数与新增病例的累加结果完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:55:20