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

如何按年/季度筛选并汇总2018-2019年股息数组数据?

问题

我正尝试从指定URL的对象中按年和季度整合股息数据。已通过以下代码获取股息日期与金额,并将日期转换为YYYY Q格式。现需移除2018和2019年以外的股息数据,仅整合这两年内的季度数据:无股息数据的季度填0,同一季度多笔股息则求和,该如何实现?

原代码

function test() {
  const url = 'https://query1.finance.yahoo.com/v8/finance/chart/BAYRY?formatted=true&lang=en-US&region=US&interval=1d&period1=1451624400&period2=1577854799&events=div&useYfid=true&corsDomain=finance.yahoo.com';
  const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true }).getContentText();;
  const obj = JSON.parse(res);
  const dividend_id = Object.keys(obj.chart.result[0].events.dividends);
  var dividend = dividend_id.map((id => [
    obj.chart.result[0].events.dividends[id].date,
    obj.chart.result[0].events.dividends[id].amount]));

  var dividend = dividend.map(arr => [new Date(arr[0] * 1000).toLocaleDateString('en-US'), arr[1]]);
  console.log(dividend)

  var dividend = dividend.map(arr => [(arr[0].slice(-4) + ' Q' + (getQuarter(new Date(arr[0])))), arr[1]]);
  console.log(dividend)

  function getQuarter(date = new Date()) {
    return Math.floor(date.getMonth() / 3 + 1);
  }

}

解决方案

通过以下步骤实现需求:

  • 筛选目标年份数据:过滤掉2018、2019年以外的股息条目
  • 季度金额求和:用对象累加同一季度的多笔股息
  • 补全无股息季度:生成两年所有季度的完整列表,空缺季度填充0

修改后的完整代码:

function test() {
  const url = 'https://query1.finance.yahoo.com/v8/finance/chart/BAYRY?formatted=true&lang=en-US&region=US&interval=1d&period1=1451624400&period2=1577854799&events=div&useYfid=true&corsDomain=finance.yahoo.com';
  const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true }).getContentText();
  const obj = JSON.parse(res);
  const dividend_id = Object.keys(obj.chart.result[0].events.dividends);
  
  // 提取日期与金额,直接转换为季度格式
  let dividend = dividend_id.map(id => {
    const date = new Date(obj.chart.result[0].events.dividends[id].date * 1000);
    const year = date.getFullYear();
    const quarter = Math.floor(date.getMonth() / 3 + 1);
    return [`${year} Q${quarter}`, obj.chart.result[0].events.dividends[id].amount];
  });

  // 筛选2018、2019年数据
  dividend = dividend.filter(item => {
    const year = parseInt(item[0].split(' ')[0]);
    return year === 2018 || year === 2019;
  });

  // 按季度累加股息金额
  const quarterlySum = {};
  dividend.forEach(item => {
    const quarterKey = item[0];
    quarterlySum[quarterKey] = (quarterlySum[quarterKey] || 0) + item[1];
  });

  // 生成完整季度列表并补0
  const allQuarters = [
    '2018 Q1', '2018 Q2', '2018 Q3', '2018 Q4',
    '2019 Q1', '2019 Q2', '2019 Q3', '2019 Q4'
  ];
  const finalResult = allQuarters.map(quarter => [
    quarter,
    quarterlySum[quarter] || 0
  ]);

  console.log(finalResult);
}

代码说明

  • 简化日期转季度逻辑,直接通过getFullYear()和getMonth()获取年份季度,避免重复解析字符串
  • 用filter方法精准筛选目标年份数据
  • 借助对象quarterlySum实现同季度金额累加,处理多笔股息的求和需求
  • 预定义两年所有季度的列表,遍历后自动补全无股息季度的0值,保证结果完整性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:15:38