You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在TypeScript中如何通过对象数组更便捷地初始化ES6 Map?

方案1:直接用Map构造函数一行实现

Map构造函数原生支持传入由[key, value]子项组成的可迭代对象,你可以先用数组map方法把原对象数组转换为符合要求的键值对数组,直接传入构造函数即可:

// 显式指定类型写法
const myMap = new Map<number, MyObject>(myObjects.map(obj => [obj.id, obj]));

// TS自动类型推断写法(加as const保证类型严谨)
const myMap = new Map(myObjects.map(obj => [obj.id, obj] as const));

这种写法和你目前用的forEach写法性能几乎一致,不需要担心额外的性能损耗。

方案2:封装通用工具函数复用

如果你频繁需要做这类转换,可以封装一个通用的类型安全工具函数,支持指定任意字段作为Map的key:

/**
 * 将对象数组转换为Map,以指定字段为key
 * @param arr 源对象数组
 * @param keyField 要作为Map key的对象字段名
 */
function arrayToMap<T, K extends keyof T>(arr: T[], keyField: K): Map<T[K], T> {
  return new Map(arr.map(item => [item[keyField], item]));
}

// 调用示例
const myMap = arrayToMap(myObjects, 'id');

后续所有同类转换都可以直接调用这个函数,不需要重复写逻辑。


内容的提问来源于stack exchange,提问作者Carson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:36:05