【问题标题】:What would be the best way to sort events according to its date根据日期对事件进行排序的最佳方法是什么
【发布时间】:2015-10-10 20:27:10
【问题描述】:

我有几百个events 的数组,其中每个都有日期条目(DB 中的Date().getTime 格式),我有 10 天 显示在简单表中.对于每一天的行,我需要显示该特定日期的事件数。最好的方法是什么?

好的,这是更新:

我有具有这种结构的 Firebase 数据库:

{
  events: {
    event1: {
      date: 144335265211,
      title: "sometext",
      text: "longer text"
      },
    event2: {
      date: 1444482619766,
      title: "sometext",
      text: "longer text"
      }
    }
 }

我将它拉入本地 Redux 存储,所以我有一个具有相同结构的 JS 数组。

这样我为特定日期创建表格:

for (let dc = 0; dc < 10; dc++) {
     const date = new Date();
     date.setDate(date.getDate() + dc);
     const m = date.getMonth();
     const d = date.getDay();
     const y = date.getUTCFullYear();
      rows.push(
        <td>"On the " + m + "/" + d + "/" + y + " is SOMENUMBER events"</td>
      );
   return rows;
    }

非常感谢!

【问题讨论】:

  • 你的解释不是很清楚。您能否包括一些代码,例如minimal reproducible example
  • 从数据库中提取元素?你用的是哪个数据库?请解释您的目标,以便我们提供帮助。现在的问题无法回答!
  • 显示的数据不是数组,它是一个对象。将需要另一个使用日期作为键并具有数组作为值的对象将事件放入作为起点,然后可能将其转换为数组或任何您需要的对象
  • 谢谢@charlietfl!你不介意概述一个简单的例子吗?

标签: javascript functional-programming reactjs


【解决方案1】:

首先需要将其转换为数组:

var events = Object.keys(obj).map((key) => {
  return Object.assign({}, obj[key], {eventName: key});
});

然后您需要按日期对它们进行分组。我们可以用 lodash 做到这一点。

var groupBy = require('lodash/collection/groupBy');

var eventsWithDay = events.map((event) => {
  return Object.assign({}, event, {day: new Date(event.date).setHours(0, 0, 0, 0))
});

var byDay = groupBy(eventsWithDay, 'day');

byDay 将是一个对象,其中每个日期都有一个键,其值是当天的事件数组。

【讨论】:

  • 感谢FakeRainBrigand 这帮了很多忙!我尝试使用 countBy 而不是 groupBy 来直接输出每天的事件数。太好了!
猜你喜欢
  • 2014-03-11
  • 2019-08-17
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2013-07-07
  • 2010-12-16
相关资源
最近更新 更多