不确定我该如何措辞,但我的问题是我正在执行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);
});
任何帮助将不胜感激!
谢谢
答案 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
行。