【问题标题】:Check if each item in an array is today's date?检查数组中的每个项目是否是今天的日期?
【发布时间】:2020-02-18 10:29:58
【问题描述】:

我有一个对象数组。每个对象都有一个日期属性。我正在尝试创建一个函数,如果项目的日期等于今天的日期,我将每个项目附加到一个新数组中。

另外,我不确定 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.prototype.filter 因为这似乎正是您正在做的事情?至于它不起作用,您有没有机会给我们提供意见?
  • 不确定 for 循环是否是最有效的方法性能,for 是最好的。为了可读性,filter 更受欢迎。
  • 建议您的代码。由于您使用的是 javascript,因此您可以将其用于更短的代码。 myArray.forEach(data => { }) 使用 forEach 而不是 for 循环
  • @RenatoManalili forEach 当你想过滤一个数组时简直是疯了;)
  • @Rajesh filter 只是 for 循环的一些语法糖。它不再有效。 filterforEachfor 都以略微不同的方式做同样的事情,没有“更好”

标签: javascript momentjs


【解决方案1】:

您可以将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));
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 有没有办法对明天的项目也这样做?就像您可以使用“day”参数并在其中添加一天以获取明天的项目列表吗?
  • 你可以这样做:arr.filter(obj =&gt; moment().add(1, 'day').isSame(obj.date, 'day')
【解决方案2】:

您的格式错误。 mm 是分钟。格式应该是DD-MM-YYYY,见https://momentjs.com/docs/#/displaying/format/

【讨论】:

  • 这也应该是一个评论,虽然指出正确
  • 为什么投反对票?这是一个有效的答案,解释了为什么 OP 的代码不能按预期工作。有更好的方法来比较日期;这可能是不好的做法,但并非无效。
  • 这修复了它。我确信有一种更清洁的方法可以做到这一点,但这让它发挥了作用。
  • 注意:@Fraction 的答案更好。保持这一点以显示原始代码是如何错误的,但请使用他们的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2018-04-05
相关资源
最近更新 更多