首页 > 解决方案 > 如何通过关键对象获取地图元素?

问题描述

有一个代码:

let a = new Map<{id: number, age: number}, string>();

a.set({id: 1, age: 20}, "1");

console.log(a.get({id:1, age: 20}));

它给了我undefined,因为添加到地图的对象和寻找的对象不相等。是否可以在地图中制作复杂的键以在何时检索它?

我可以做这个:

  let a = new Map<string, string>();

其中 string key 是 concatination: id_age,但我不喜欢这个,因为它不是很明显

标签: typescripttypes

解决方案


对象按引用工作,而不是按值工作。这意味着{ a: 5, b: 6 } !== { a: 5, b: 6 }

您可以做的是创建一个类,该类具有一个equals按值比较属性的自定义方法,而不是您当前拥有的对象键:

export default class Person {
  public id: number;
  public age: number;
  
  constructor(id: number, age: number) {
    this.id = id;
    this.age = age;
  }

  public equals(obj: any): boolean {
    return obj && typeof obj === 'object' && obj.id === this.id && obj.age === this.age;
  } 
} 

然后在您的地图中使用它:

const map = new Map<Person, string>();

map.set(new Person(1, 20), '1');
console.log(map.get(new Person(1, 20)); // '1'

推荐阅读