如何过滤两个日期之间的对象数组?

How can I filter an array of objects between two dates?

本文关键字:之间 数组 日期 对象 何过滤 过滤 两个      更新时间:2023-09-26

除了偶尔的jQuery选择器和元素修改,我不太擅长javascript。对于我遇到的问题,我需要按日期过滤出javascript对象。我有一个像这样的结构:

Object { version: "3.1.1", released_on: "2016-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 }

我想找到"2016-08-21T00:00:00.000Z""2010-08-21T00:00:00.000Z"之间10年的所有对象,我遇到的问题是released_on:字段是字符串而不是日期。我是否需要创建一个new Date()对象,将其转换为字符串,然后使用.filter,或者我将做相反的事情,将字符串转换为日期,然后过滤。以前有人尝试过这样的东西吗?

您可以这样做;

var data = [{ version: "3.1.1", released_on: "2016-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2011-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2009-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2006-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2013-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2017-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
            { version: "3.1.1", released_on: "2015-08-21T00:00:00.000Z", high_vulns: 15, medium_vulns: 10, low_vulns: 5 },
           ],
      ed = new Date("2016-08-21T00:00:00.000Z").getTime(),
      sd = new Date("2010-08-21T00:00:00.000Z").getTime(),
  result = data.filter(d => {var time = new Date(d.released_on).getTime();
                             return (sd < time && time < ed);
                            });
console.log(result);

export const filterBetweenDates = (data, setState, fromDate, toDate) => {
  try {
    setState(data.filter(({ date }) => date >= fromDate && date <= toDate));
  } catch (error) {
    console.log('error while filtering by dates', error.message);
  }
};