iterable - 我如何在 TypeScript 中映射一組物件
第一次嘗試 TypeScript。
我有一個看起來像…的物體
interface Job {
//... some data
priority: number
}
我想要從一組工作中返回最高優先級(注意:不是工作本身,而是實際的值)。所以很自然地,我只是嘗試了:
// let jobs: Set<Job> = fetchJobs();
jobs.map((job) => job.priority).max()
// or
jobs.values().map((job) => job.priority).max()
但它告訴我Uncaught TypeError: jobs.map 不是一個函數
答案#1
Set 物件沒有 map() 方法,所以你收到錯誤訊息並不令人意外。你可能是想到 Array 物件上的 map() 方法。Set 不是 Array,雖然兩者都是 可迭代的。幸運的是,你可以用多種方法將任何可迭代物轉換成 Array:
你可以將它傳給靜態的 Array.from() 方法:
const jobArray = Array.from(jobs); // Job[]
或者你可以將它展開成陣列字面值:
const jobArray = [...jobs]; // Job[]
請注意,Set 的 values() 方法會產生與將 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 連結
