我有一个对象数组。每个对象都有一个日期属性。我正在尝试创建一个函数,如果项目的日期等于今天的日期,我将每个项目附加到一个新数组。
另外,我不确定 for 循环是否是最有效的方法,尽管这个列表永远不会超过几百个项目。
我的功能:
todayListItems() {
const todayItems = [];
const todayDate = moment(new Date()).format('dd-mm-YYYY');
for (let i = 0; i < myArray.length; i++) {
const itemDate = moment(myArray[i].date).format('dd-mm-YYYY');
if (itemDate === todayDate) {
todayItems.push(myArray[i]);
}
}
console.log(todayItems);
return todayItems;
}
此函数会运行,但即使有日期为今天的项目,也不会将任何内容推送到数组。
最佳答案
您可以使用 Array.filter()
和 moment#isSame
使用第二个参数将粒度限制为毫秒以外的单位:
function todayListItems(arr) {
return arr.filter(obj => moment().isSame(obj.date, 'day'));
}
todayListItems(myArray);
演示:
function todayListItems(arr) {
return arr.filter(obj => moment().isSame(obj.date, 'day'));
}
const myArray = [
{ date: '2019-10-14T12:10:00Z'},
{ date: new Date() },
{ date: moment().minutes(120).format('YYYY-MM-DDTHH:mm:ss') },
{ date: new Date('2019-10-23T01:00:00') },
];
console.log(todayListItems(myArray));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
关于javascript - 检查数组中的每一项是否是今天的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58501449/