javascript - 从 jquery 中的 json 响应中获取当前月份的日期范围

标签 javascript jquery

我正在开发一个应用程序。我收到 AJAX 请求的响应,如下所示:

{
  "country": "italy",
  "timeline": {
    "cases": {
      "1/22/20": 0,
      "1/23/20": 0,
      "1/24/20": 0,
      "1/25/20": 0,
      "1/26/20": 0,
      "1/27/20": 0,
      "1/28/20": 0,
      "1/29/20": 0,
      "1/30/20": 0,
      "1/31/20": 2,
      "2/1/20": 2,
      "2/2/20": 2,
      "2/3/20": 2,
      "2/4/20": 2,
      "2/5/20": 2,
      "2/6/20": 2,
      "2/7/20": 3,
      "2/8/20": 3,
      "2/9/20": 3,
      "2/10/20": 3,
      "2/11/20": 3,
      "2/12/20": 3,
      "2/13/20": 3,
      "2/14/20": 3,
      "2/15/20": 3,
      "2/16/20": 3,
      "2/17/20": 3,
      "2/18/20": 3,
      "2/19/20": 3,
      "2/20/20": 3,
      "2/21/20": 20,
      "2/22/20": 62,
      "2/23/20": 155,
      "2/24/20": 229,
      "2/25/20": 322,
      "2/26/20": 453,
      "2/27/20": 655,
      "2/28/20": 888,
      "2/29/20": 1128,
      "3/1/20": 1694,
      "3/2/20": 2036,
      "3/3/20": 2502,
      "3/4/20": 3089,
      "3/5/20": 3858,
      "3/6/20": 4636,
      "3/7/20": 5883,
      "3/8/20": 7375,
      "3/9/20": 9172,
      "3/10/20": 10149,
      "3/11/20": 12462,
      "3/12/20": 12462,
      "3/13/20": 17660,
      "3/14/20": 21157,
      "3/15/20": 24747,
      "3/16/20": 27980,
      "3/17/20": 31506,
      "3/18/20": 35713,
      "3/19/20": 41035,
      "3/20/20": 47021,
      "3/21/20": 53578,
      "3/22/20": 59138,
      "3/23/20": 63927,
      "3/24/20": 69176,
      "3/25/20": 74386,
      "3/26/20": 80589,
      "3/27/20": 86498
    },
    "deaths": {
      "1/22/20": 0,
      "1/23/20": 0,
      "1/24/20": 0,
      "1/25/20": 0,
      "1/26/20": 0,
      "1/27/20": 0,
      "1/28/20": 0,
      "1/29/20": 0,
      "1/30/20": 0,
      "1/31/20": 0,
      "2/1/20": 0,
      "2/2/20": 0,
      "2/3/20": 0,
      "2/4/20": 0,
      "2/5/20": 0,
      "2/6/20": 0,
      "2/7/20": 0,
      "2/8/20": 0,
      "2/9/20": 0,
      "2/10/20": 0,
      "2/11/20": 0,
      "2/12/20": 0,
      "2/13/20": 0,
      "2/14/20": 0,
      "2/15/20": 0,
      "2/16/20": 0,
      "2/17/20": 0,
      "2/18/20": 0,
      "2/19/20": 0,
      "2/20/20": 0,
      "2/21/20": 1,
      "2/22/20": 2,
      "2/23/20": 3,
      "2/24/20": 7,
      "2/25/20": 10,
      "2/26/20": 12,
      "2/27/20": 17,
      "2/28/20": 21,
      "2/29/20": 29,
      "3/1/20": 34,
      "3/2/20": 52,
      "3/3/20": 79,
      "3/4/20": 107,
      "3/5/20": 148,
      "3/6/20": 197,
      "3/7/20": 233,
      "3/8/20": 366,
      "3/9/20": 463,
      "3/10/20": 631,
      "3/11/20": 827,
      "3/12/20": 827,
      "3/13/20": 1266,
      "3/14/20": 1441,
      "3/15/20": 1809,
      "3/16/20": 2158,
      "3/17/20": 2503,
      "3/18/20": 2978,
      "3/19/20": 3405,
      "3/20/20": 4032,
      "3/21/20": 4825,
      "3/22/20": 5476,
      "3/23/20": 6077,
      "3/24/20": 6820,
      "3/25/20": 7503,
      "3/26/20": 8215,
      "3/27/20": 9134
    }
  }
}

如您所知,我在此回复中提供了二月和三月的日期。我只想获取当前月份内具有相应值的日期范围,在本例中为三月。我怎样才能在 jQuery 中实现这一点?

$.ajax({
  url: 'https://corona.lmao.ninja/v2/historical/italy',
  type: 'GET',
  dataType: 'JSON',
  success: function(data) {
    console.log('in');
    console.log(data);
  }
});

最佳答案

您可以使用Object.keys() , filter() & reduce()实现此目的的方法如下:

$.ajax({
  url: 'https://corona.lmao.ninja/v2/historical/italy',
  type: 'GET',
  dataType: 'JSON',
  success: function(data) {
    const date = new Date(),y = date.getFullYear(),m = date.getMonth();
    const firstDay = new Date(y, m, 1).getTime(), lastDay = new Date(y, m + 1, 0).getTime();
    const currentData = Object.keys(data.timeline.cases)
      .filter(key => firstDay <= new Date(key).getTime() && new Date(key).getTime() <= lastDay)
      .reduce((o, k) => { o[k] = data.timeline.cases[k]; return o }, {});
    console.log(currentData)
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

说明:

  1. 首先在 ajax success 方法中,我们尝试获取当月的第一天和最后一天,因为我们需要这些值来过滤数据。
  2. 然后使用 Object.keys 我们获取 data.timeline.cases 中的所有键,因为它保存所有日期字符串作为键。
  3. 然后使用 filter() 方法我们只获取当月第一天和最后一天之间的键。
  4. 然后,我们尝试使用 reduce() 方法重建 data.timeline.cases 对象,以便您可以在应用程序中使用它。

关于javascript - 从 jquery 中的 json 响应中获取当前月份的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60902696/

相关文章:

javascript - 我需要以 10 个文件为间隔解析 json 文件

javascript - 简单的 JavaScript 选择器

javascript - js中如何将对象放入HashMap中?

javascript - angularjs回调/等待函数完成

javascript - jquery slider 在我到达最后一个后不会继续

javascript - 在 Canvas 上绘制多个矩形

javascript - 以编程方式打开 lightgallery.js

javascript - 如何使用 jquery 获取宽度百分比

javascript - 使用 CSS 居中并动态调整水平下拉菜单栏的大小

javascript - 如何在React js中进行迭代并分成两组?