TypeScript实现双层键字典:将单键映射改为双键映射
TypeScript实现双层键映射字典
方法1:嵌套对象类型定义
直接修改原有的字典类型,将外层键对应的值定义为另一个字典,内层字典映射到你的ResultModel类型:
// 先明确你的ResultModel结构(示例) interface ResultModel { // 替换成你实际的resultmodel属性 value: number; } // 双层键映射的字典声明 dict: { [firstKey: string]: { [secondKey: string]: ResultModel } } = {};
赋值与取值注意事项
直接赋值时需要确保外层键对应的内层对象已存在,否则会抛出错误:
// 错误方式:dict['a']未初始化时直接赋值 // dict['a']['1'] = { value: 2 }; // 运行时会报错 // 正确方式:先初始化内层对象 dict['a'] = {}; dict['a']['1'] = { value: 2 }; // 取值 const targetResult = dict['a']['1']; // 获取到{ value: 2 }
方法2:封装辅助方法自动初始化内层对象
为避免手动初始化内层对象的繁琐,可封装set和get方法处理:
// 类型定义同方法1 interface ResultModel { value: number; } dict: { [firstKey: string]: { [secondKey: string]: ResultModel } } = {}; // 双层键赋值方法 setDoubleKey(firstKey: string, secondKey: string, value: ResultModel) { // 外层键不存在时,先创建内层空字典 if (!this.dict[firstKey]) { this.dict[firstKey] = {}; } this.dict[firstKey][secondKey] = value; } // 双层键取值方法(避免undefined报错) getDoubleKey(firstKey: string, secondKey: string): ResultModel | undefined { // 用可选链操作符?.避免内层对象不存在时的报错 return this.dict[firstKey]?.[secondKey]; } // 使用示例 this.setDoubleKey('a', '1', { value: 2 }); const result = this.getDoubleKey('a', '1');
方法3:使用Map嵌套Map
如果需要频繁增删键,或键的类型更灵活,推荐用Map嵌套的方式:
interface ResultModel { value: number; } // 声明双层Map dict: Map<string, Map<string, ResultModel>> = new Map(); // 赋值操作 if (!this.dict.has('a')) { this.dict.set('a', new Map()); } this.dict.get('a')?.set('1', { value: 2 }); // 取值操作 const result = this.dict.get('a')?.get('1');
内容的提问来源于stack exchange,提问作者JJJJJJ
相关产品推荐
相关产品推荐

