如何在打字稿中映射一组对象

Typ*_*aon 5 iterable typescript

第一次尝试打字稿。

我有一个看起来像的物体

interface Job {
//... some data
    priority: number
}
Run Code Online (Sandbox Code Playgroud)

我想返回一组作业中的最高优先级(注意:不是作业本身,而是实际值)。所以很自然地我就尝试了:

// let jobs: Set<Job> = fetchJobs();
jobs.map((job) => job.priority).max()
// or
jobs.values().map((job) => job.priority).max()
Run Code Online (Sandbox Code Playgroud)

但它告诉我Uncaught TypeError: jobs.map is not a function

jca*_*alz 9

Set对象没有map()方法,因此出现错误也就不足为奇了。可能会考虑对象上的方法map()。A不是 an ,尽管两者都是可迭代的。幸运的是,您可以通过多种方式将任何 iterable 转换为 an :ArraySetArrayArray

您可以将其传递给静态Array.from()方法

const jobArray = Array.from(jobs); // Job[]
Run Code Online (Sandbox Code Playgroud)

或者您可以将其扩展为数组文字

const jobArray = [...jobs]; // Job[]
Run Code Online (Sandbox Code Playgroud)

请注意,avalues()的方法Set生成的迭代器与将 the 视为迭代器时使用的迭代器完全相同Set,因此虽然您可以使用它,但没有必要:

const jobArray = Array.from(jobs.values()); // same thing

const jobArray = [...jobs.values()]; // also same thing
Run Code Online (Sandbox Code Playgroud)

将 转换Set为 an后,Array您可以使用map()并根据需要处理结果:

const max = Math.max(...jobArray.map(j => j.priority)); // number
Run Code Online (Sandbox Code Playgroud)

Playground 代码链接