首页 > 解决方案 > 在 Typescript 中使用 find/reduce/filter 从数组中查找第一个匹配项

问题描述

“结果”会给我类型“事件|未定义”。
有没有办法让“结果”变成“事件”?
或者有什么方法可以使用reduce()或map()执行相同的行为?

我的目标是从数组中获取第一个匹配类别。

data: Event[] = [
  {
    title: "demo 1",
    category: "a"
  },
  {
    title: "demo 2",
    category: "b"
  },
  {
    title: "demo 3",
    category: "a"
  },
]

const result = data.find(item => item.category === 'a')

标签: javascriptnode.jstypescriptecmascript-6

解决方案


如果您知道要比较的类别字符串将始终存在,则可以使用 not null 断言运算符!

// Note: the type hinting here is optional
const result: Event = data.find(item => item.category === 'a')!;

按索引访问数组永远不会给你Event | undefinedfor Event[]。所以,你也可以做这样的事情(同样,你会忽略 index 可以是的情况-1):

const index = data.findIndex(item => item.category === 'a');
// Note: the type hinting here is optional
const result: Event = data[index];

推荐阅读