如何在打字稿中映射一组对象
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
第一次尝试打字稿。
我有一个对象看起来像
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