【问题标题】:filter array of objects with less than and present date过滤具有小于和当前日期的对象数组
【发布时间】:2021-10-01 07:07:33
【问题描述】:

我有不同日期的对象。我如何过滤掉过去的日期和现在的日期。我有过去和未来的日期,我只想要对象的过去日期和当前日期。我尝试过滤,但我不确定我在做什么错 我的代码:

const arr = [{
    "id": "e18dae03-99c7-4ffa-be2f-a595fc7fad15",
    "event_date": "2021-09-30T01:00:00.000Z",
    "alert_name": null,
    "alert_level": null,
    "alert_action": null,
    "alert_details": null,
},
{
    "id": "e18dae03-99c7-4ffa-be2f-a595fc7fad15",
    "event_date": "2021-10-30T01:00:00.000Z",
    "alert_name": null,
    "alert_level": null,
    "alert_action": null,
    "alert_details": null,
}
{
    "id": "765a508f-fb47-4de4-bf69-19f0db38ccfc",
    "event_date": "2021-09-17T22:03:00.000Z",
    "alert_name": null,
    "alert_level": null,
    "alert_action": null,
    "alert_details": null,
},
{
    "id": "bc07a114-43f4-49a1-bb6c-fec801aee749",
    "longitude": null,
    "event_date": "2021-11-19T07:51:00.000Z",
    "alert_name": null,
    "alert_level": null,
    "alert_action": null,
    "alert_details": null,
}
]


const filterByExpiration = () => arr.filter(({ event_date }) => event_date <= new Date());



【问题讨论】:

    标签: javascript arrays reactjs object


    【解决方案1】:

    event_date 是一个字符串。您应该先将其转换为 Date 对象。

    const filterByExpiration = () => arr.filter(({ event_date }) => new Date(event_date) <= new Date());
    

    或将其与 ISO 日期字符串进行比较

    const filterByExpiration = () => arr.filter(({ event_date }) => event_date <= new Date().toISOString());
    

    【讨论】:

      【解决方案2】:

      字符串不能与日期进行比较。您需要使用new Date(event_date)event_date 解析为Date。正确的比较是

      new Date(event_date) <= new Date()
      

      const arr = [{
              "id": "e18dae03-99c7-4ffa-be2f-a595fc7fad15",
              "event_date": "2021-09-30T01:00:00.000Z",
              "alert_name": null,
              "alert_level": null,
              "alert_action": null,
              "alert_details": null,
          },
          {
              "id": "e18dae03-99c7-4ffa-be2f-a595fc7fad15",
              "event_date": "2021-10-30T01:00:00.000Z",
              "alert_name": null,
              "alert_level": null,
              "alert_action": null,
              "alert_details": null,
          },
          {
              "id": "765a508f-fb47-4de4-bf69-19f0db38ccfc",
              "event_date": "2021-09-17T22:03:00.000Z",
              "alert_name": null,
              "alert_level": null,
              "alert_action": null,
              "alert_details": null,
          },
          {
              "id": "bc07a114-43f4-49a1-bb6c-fec801aee749",
              "longitude": null,
              "event_date": "2021-11-19T07:51:00.000Z",
              "alert_name": null,
              "alert_level": null,
              "alert_action": null,
              "alert_details": null,
          }
      ]
      
      
      const filterByExpiration = () => arr.filter(({ event_date }) => new Date(event_date) <= new Date());
      
      console.log(filterByExpiration());

      【讨论】:

        【解决方案3】:

        您的event_date 是一个字符串。这就是为什么比较会给出你不期望的结果。您需要将字符串转换为Date object

        const arr = [{
            "id": "e18dae03-99c7-4ffa-be2f-a595fc7fad15",
            "event_date": "2021-09-30T01:00:00.000Z",
            "alert_name": null,
            "alert_level": null,
            "alert_action": null,
            "alert_details": null,
        },
        {
            "id": "e18dae03-99c7-4ffa-be2f-a595fc7fad15",
            "event_date": "2021-10-30T01:00:00.000Z",
            "alert_name": null,
            "alert_level": null,
            "alert_action": null,
            "alert_details": null,
        },
        {
            "id": "765a508f-fb47-4de4-bf69-19f0db38ccfc",
            "event_date": "2021-09-17T22:03:00.000Z",
            "alert_name": null,
            "alert_level": null,
            "alert_action": null,
            "alert_details": null,
        },
        {
            "id": "bc07a114-43f4-49a1-bb6c-fec801aee749",
            "longitude": null,
            "event_date": "2021-11-19T07:51:00.000Z",
            "alert_name": null,
            "alert_level": null,
            "alert_action": null,
            "alert_details": null,
        }
        ]
        
        
        const filterByExpiration = () => arr.filter(({ event_date }) => {
        let x = new Date(event_date);
        return (x <= new Date());
        });
        
        console.log(filterByExpiration());

        【讨论】:

          【解决方案4】:

          您必须将arr 的每个节点中的节点event_date 转换为日期对象才能进行比较。截至目前,它是一个字符串。

          您还必须调用filterByExpiration 函数。你刚刚定义了它,它还没有被调用。

          工作小提琴

          const arr = [{"id":"e18dae03-99c7-4ffa-be2f-a595fc7fad15","event_date":"2021-09-30T01:00:00.000Z","alert_name":null,"alert_level":null,"alert_action":null,"alert_details":null},{"id":"e18dae03-99c7-4ffa-be2f-a595fc7fad15","event_date":"2021-10-30T01:00:00.000Z","alert_name":null,"alert_level":null,"alert_action":null,"alert_details":null},{"id":"765a508f-fb47-4de4-bf69-19f0db38ccfc","event_date":"2021-09-17T22:03:00.000Z","alert_name":null,"alert_level":null,"alert_action":null,"alert_details":null},{"id":"bc07a114-43f4-49a1-bb6c-fec801aee749","longitude":null,"event_date":"2021-11-19T07:51:00.000Z","alert_name":null,"alert_level":null,"alert_action":null,"alert_details":null}];
          const filterByExpiration = () => arr.filter(({ event_date }) => new Date(event_date) <= new Date());
          console.log(filterByExpiration())

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-05-14
            • 2019-10-20
            • 2021-11-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多