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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:30:39