在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
相关产品推荐
相关产品推荐

