分享
三行代码  ›  专栏  ›  技术社区  ›  Smokey Dawson

返回一系列CreationTimes中的最近时间

  •  2
  • Smokey Dawson  · 技术社区  · 1 年前

    不完全确定我是如何回答这个问题的,但我的问题是我正在做一个API调用,它返回一堆有创建时间的消息,现在我只想返回同一日期消息的最新创建时间,所以说如果我在2018年3月15日有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 回复  |  直到 1 年前
        1
  •  1
  •   klugjo    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);
    });
    
        2
  •  0
  •   Simon K    1 年前

    可以使用下划线 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 行。