返回一系列创建时间中的最新时间

时间:2018-06-25 00:57:06

标签: javascript angular typescript

不确定我该如何措辞,但我的问题是我正在执行api调用,该调用返回一堆具有创建时间的消息,现在我只想返回具有相同创建时间的消息的最新creationTime所以说日期,如果我在15/03/2018上有30条消息,我想抓住最近的时间,而丢弃其余时间..然后对具有相同日期的每组消息都这样做

到目前为止,我所做的是..

使用lodash,我得到了所有消息,过滤出了所有具有特定类型的消息,并按creationTime对其进行了排序,因此最新消息位于顶部,然后下降。.现在我的问题是我该如何制作每个日期的最新时间数组?

this._activityServiceProxy.getAllItems(start, end).subscribe(result => {
        // this.messages = result;
        // console.log(result);
        let loginUnfiltered = _.filter(result, {'title': 'LOGIN'});
        let loginFiltered = _.orderBy(loginUnfiltered, {'creationTime': 'desc'});
        console.log(loginFiltered);
});

任何帮助将不胜感激!

谢谢

2 个答案:

答案 0 :(得分:1)

使用.map(...)获得仅最新creationTime的数组:

this._activityServiceProxy.getAllItems(start, end).subscribe(result => {
        // this.messages = result;
        // console.log(result);
        let loginUnfiltered = _.filter(result, {'title': 'LOGIN'});
        let loginFiltered = _.orderBy(loginUnfiltered, {'creationTime': 'desc'});
        const creationTimes = loginFiltered.map(l => l.creationTime);
        console.log(creationTimes);
        const latestTime = creationTimes[0];
        console.log(latestTime);
});

答案 1 :(得分:0)

您可以使用Underscore的groupBy函数来实现此目的:

const groups = _.groupBy(loginFiltered, (login) => {
    const asDate = new Date(login.creationTime);
    asDate.setHours(0, 0, 0, 0);
    return asDate;
});
Object.keys(groups).forEach((key) => {
    console.log(groups[key][0]);
});

您通过creationDate属性进行分组,但是删除了时间部分,因此所有日期都被分组在一起。然后,您遍历结果,每天只参加第一项。

请注意,这假设您的creationTime属性是一个字符串,因为它来自API。如果已经是日期,则不需要new Date行。