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

How do I map a Set of Objects in typescript

第一次尝试打字稿。

我有一个对象看起来像

interface Job {
//... some data
    priority: number
}

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

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

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

Set objects do not have a map() method, so it's not surprising that you're getting errors. You might be thinking of the map() method on Array objects instead. A Set is not an Array, although both are iterable。幸运的是,您可以通过多种方式将任何可迭代对象转换为 Array

你可以把它传给the static Array.from() method:

const jobArray = Array.from(jobs); // Job[]

或者你可以spread it into an array literal:

const jobArray = [...jobs]; // Job[]

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

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

const jobArray = [...jobs.values()]; // also same thing

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

const max = Math.max(...jobArray.map(j => j.priority)); // number

Playground link to code