javascript - 从数组中删除对象到给定日期javascript
问题描述
嗨,我到处搜索,无法完成这些事情
我想从数组中删除过时的(直到昨天)对象
我的数组看起来像这样
[{"apdate": "09-12-2020", "booked": "14:30"},
{"apdate": "11-12-2020", "booked": "19:30"},
{"apdate": "10-12-2020", "booked": "19:00"},
{"apdate": "17-12-2020", "booked": "14:30"},
{"apdate": "17-12-2020", "booked": "15:30"},
{"apdate": "17-12-2020", "booked": "19:00", "phone": "9898989898"},
{"apdate": "10-01-2021", "booked": "16:00"},
{"apdate": "29-01-2021", "booked": "18:30"},
{"apdate": "01-02-2021", "booked": "14:00", "name": "Anand", "uuid": "cPA7ND7U2jdw7qY6nHf4kWuxyx53"},
{"apdate": "01-02-2021", "booked": "10:00", "name": "Anand", "uuid": "cPA7ND7U2jdw7qY6nHf4kWuxyx53"},
{"apdate": "01-02-2021", "booked": "03:30", "name": "Anand", "uuid": "cPA7ND7U2jdw7qY6nHf4kWuxyx53"}]
请指导我
解决方案
我想
yesterday
从数组中删除过时的(最多)对象
老实说,你应该记住永远不要改变你的数据
==>
只需根据您的需要使用它。
您可以使用.filter
基于given_date
.
const data = [
{apdate: "09-12-2020", booked: "14:30"},
{apdate: "11-12-2020", booked: "19:30"},
{apdate: "10-12-2020", booked: "19:00"},
{apdate: "17-12-2020", booked: "14:30"},
{apdate: "17-12-2020", booked: "15:30"},
{apdate: "17-12-2020", booked: "19:00", phone: "9898989898"},
{apdate: "10-01-2021", booked: "16:00"},
{apdate: "29-01-2021", booked: "18:30"},
{apdate: "01-02-2021", booked: "14:00", name: "Anand", uuid: "cPA7ND7U2jdw7qY6nHf4kWuxyx53"},
{apdate: "01-02-2021", booked: "10:00", name: "Anand", uuid: "cPA7ND7U2jdw7qY6nHf4kWuxyx53"},
{apdate: "01-02-2022", booked: "03:30", name: "Anand", uuid: "cPA7ND7U2jdw7qY6nHf4kWuxyx53"}
];
const convertStringToDate = (strDate) => {
const values = strDate.split("-");
return new Date(values[2], values[1] - 1, values[0]);
};
const filterDataByGivenDate = (data, givenDate) => data.filter(r => convertStringToDate(r.apdate) >= givenDate);
const today = new Date();
const yesterday = today.setDate(today.getDate() - 1);
console.log(filterDataByGivenDate(data, yesterday));
一种更优雅的方式是使用moment.js
const data = [
{apdate: "09-12-2020", booked: "14:30"},
{apdate: "11-12-2020", booked: "19:30"},
{apdate: "10-12-2020", booked: "19:00"},
{apdate: "17-12-2020", booked: "14:30"},
{apdate: "17-12-2020", booked: "15:30"},
{apdate: "17-12-2020", booked: "19:00", phone: "9898989898"},
{apdate: "10-01-2021", booked: "16:00"},
{apdate: "29-01-2021", booked: "18:30"},
{apdate: "01-02-2021", booked: "14:00", name: "Anand", uuid: "cPA7ND7U2jdw7qY6nHf4kWuxyx53"},
{apdate: "01-02-2021", booked: "10:00", name: "Anand", uuid: "cPA7ND7U2jdw7qY6nHf4kWuxyx53"},
{apdate: "01-02-2022", booked: "03:30", name: "Anand", uuid: "cPA7ND7U2jdw7qY6nHf4kWuxyx53"}
];
const filterDataByGivenDate = (data, givenDate) => data.filter(r => moment(r.apdate, 'DD-MM-YYYY').isSameOrAfter(givenDate));
const yesterday = moment().subtract(1, 'days');
console.log(filterDataByGivenDate(data, yesterday));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
该
filter()
方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。
推荐阅读
- spring - Spring AOP 的 IllegalArgumentException
- javascript - 使用lodash从角度8中的列表中删除重复的字符串(忽略大小写)
- security - 如何限制任何人(也包括 root 用户)在 Linux 中修改文件
- python - Python Sphinx css 在 github 页面上不起作用
- javascript - 为什么在 es5 中的函数表达式后面还有一组括号?
- c# - 为什么数据表在c#中填充错误的列
- redis - 在 redis intaractive 模式下以间隔重复命令
- sql - 有什么更好的方法,先做一个联合然后再加入 o 在联合的所有表中加入?
- android-studio - Android studio 如何使用 SharedPrefences 来存储页面活动?
- python - 使用 GroupBy 后如何将 Python 数据框写回 Excel 文件?