【发布时间】:2022-01-19 00:19:51
【问题描述】:
我正在努力根据特定条件从一组对象中检索一个子集。我有以下格式的对象数组:
const messages = [
{
summary: '[x1fg66pwq-qft] Second reminder to submit supporting documents',
date: '1624652200',
type: 1
},
{
summary: '[x1fg66pwq-fgh] Final reminder to submit supporting documents',
date: '1629058600',
type: 4
},
{
summary: '[zy9l89ptb-yuw] Please submit your proof of address',
date: '1631708200',
type: 2
},
{
summary: '[ggk9nygh8-pmn] Your application has been successful.',
date: '1634300200',
type: 1
},
]
还有另一个数组,它根据摘要方括号中的消息 ID 提供要检索的消息:
const messageIds = ['x1fg66pwq', 'zy9l89ptb'];
结果应该是根据messageIds 数组中的内容检索最新消息。日期字段以纪元为单位。
const result = [
{
summary: '[x1fg66pwq] Final reminder to submit supporting documents',
date: '1629058600',
type: 4
},
{
summary: '[zy9l89ptb] Please submit your proof of address',
date: '1631708200',
type: 2
},
]
为了实现上述目的,我尝试组合一个过滤器并找到对我不起作用的:
const result = messages.filter((message) =>
messageIds.find(id => message.summary.includes(testEvent))
);
我希望上面返回数组中指定摘要的第一个结果。但是,这总是为我返回完整的数组而不过滤。有人可以帮我实现这一目标吗?
【问题讨论】:
-
我认为您的方法没有问题。它返回过滤后的消息数组,其中包含在您的
messageIds中指定的相同摘要。我尝试执行它,并得到一个包含 3 个项目而不是 4 个项目的新数组。现在您只需要获取最新消息。我错了吗? -
是的,我只需要获取最新的,我认为这是我的方法不起作用的地方
-
@Julien 绝对。代码按预期工作。他实际上有两个具有相同 ID 的摘要。他想要最新的。
-
你的做法没有错。你只需要一步一步地做事。在这里,您已经过滤了您的数组。现在您可以按 ID 对其进行分组,然后按日期对每个组进行排序,然后从每个组中取出第一项。这样您就会收到最新消息。
-
抱歉,我在消息对象中遗漏了一些内容。方括号中的字符串是 id 后跟一个具有潜在含义的三个字母的单词。
messagesId数组只包含 id 而不是三个字母的单词。帖子已更新
标签: javascript arrays algorithm ecmascript-6 filtering