【发布时间】:2020-05-25 15:41:21
【问题描述】:
我在构建过滤器数据管道时遇到问题。我想传递从我的对象中删除重复的数据。
这是我的 ngFor:
<ng-container *ngFor="let message of messages | filterDates">
我想通过这个管道传递我的消息数组,以从每个对象中删除重复的日期。 我数组中的每个对象都有
'timestamp': 1590064423327
有些对象有相同的时间戳,有些则没有。如果数组中的前一个对象具有相同的时间戳值,我想在这些对象中将时间戳设置为空。如果以前的时间戳值不同,我想传递当前对象中的时间戳。
为了更好地理解,示例如下: 我正在从我的 API 接收带有时间戳的消息。我只想显示第一条消息的日期,因为下一条消息来自同一天,所以不需要显示这些消息的日期。如果下一条消息不是来自同一天,我只想显示下一个时间戳的第一条消息日期值。它用于按日期对消息进行分组。
我为此准备了管道,但不幸的是,我不确定要在此管道中做什么才能实现这一特定目标。我很确定,我应该使用 Lodash,但我不知道应该使用哪个运算符。提前感谢您的帮助。
这是我从@Yogesh 开发者回答中遇到的问题:
我认为这里的问题是,它会将 null 推送到数组元素,然后将下一项与 null 时间戳进行比较。我忘了提到,我必须以格式化日期的方式比较时间戳,因为时间戳是秒数,所以它们总是不同的。这就是我将格式化日期与 momentjs 进行比较的方式:
if (index > 0 && (moment(message.timestamp).format('DD/MM/YYYY') == moment(messages[index - 1].timestamp).format('DD/MM/YYYY'))) {
message.timestamp = null
}
finalMessages.push(message)
【问题讨论】:
-
您可以使用简单的 for-each 循环遍历您的数组,保存最后一个时间戳并将其与当前时间戳进行比较。每当省略时间戳时,为每个条目创建一个新对象,并将它们推送到新数组。
-
你在管道中尝试过什么?
-
我已经从 lodash 尝试了 uniqBy,但这只是按时间戳对我的对象进行分组,并删除了所有具有相同时间戳的对象