打字稿:使用日期作为Map中的键?

网际网路

在我的应用程序中,我需要每个日期的对象图。由于打字稿既有个对象Map又有个Date对象,所以我希望这很容易。

  let map: Map<Date, MyObject> = new Map<Date, MyObject>();

并用于set添加新的键和值对。但是后来我意识到get,除非使用完全相同的实例,否则不能使用日期值Date

我已经用它编写了一个单元测试:

  it('Should not be a problem', () => {
      let d1: Date = new Date(2019, 11, 25);    // Christmas day
      let d2: Date = new Date(2019, 11, 25);    // Same Christmas day?

      let m: Map<Date, string> = new Map<Date, string>();
      m.set(d1, "X");

      expect(m.get(d1)).toBe("X");   // <- This is OK.
      expect(m.get(d2)).toBe("X");   // <- This test fails.
  });

为什么除非使用完全相同的实例,否则无法从映射中获取值?

lo

这是的核心逻辑Map,正如您所知,映射将值存储在键值对中。

为了比较按键,按键应始终具有相同的参考。如您所知,字符串文字引用在许多编程语言中是相等的,因此,首选使用string作为map中的键。

上面的行为不仅date适用于任何其他可变对象类型而且适用于任何其他可变对象类型。

例如

let str1 = 'test';
let str2 = 'test';
str1 == str2; // true

let str1 = new String('test');
let str2 = new String('test');
str1 == str2; // false

从中获取价值时map,不考虑密钥数据,而是密钥的唯一标识是search。而且,当您创建不可变对象时,每个对象可能具有相同的数据,但是每个对象的引用将不同。因此,它将被视为不同的键。

解决方案是在整个程序中具有相同引用的使用类型,例如字符串文字。

再举一个例子

class Demo {
  field: string;
  constructor(f: string) {
    this.field = f;
  }
}

const d1 = new Demo('test');
const d2 = new Demo('test');

// both objects seems same by data, but there references are different
// hence will be treated as separate keys.
const m: Map<any, string> = new Map<any, string>();
m.set(d1, 'value1');

console.log(m.get(d1)); // value1
console.log(m.get(d2)); // undefined

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

联合类型的部分键作为打字稿中对象的键

来自分类Dev

使用Jest作为打字稿中的方法

来自分类Dev

打字稿中的变量键作为对象成员

来自分类Dev

打字稿中的相交键

来自分类Dev

打字稿模板文字作为接口键

来自分类Dev

打字稿:枚举键作为函数的参数

来自分类Dev

使用const作为打字稿中的对象和类型?

来自分类Dev

不能在打字稿地图中使用数字作为键?

来自分类Dev

在打字稿中获取类的键

来自分类Dev

枚举作为打字稿中的通用类型

来自分类Dev

打字稿:使用元组作为索引类型

来自分类Dev

如何在打字稿中从 Map 获取所有键?

来自分类Dev

如何区分打字稿中的日期?

来自分类Dev

根据打字稿中的输入键,使用动态键从对象中选取值

来自分类Dev

为什么Map不能将日期作为键使用?

来自分类Dev

将useReducer分发作为打字稿中的道具,要使用哪种类型?

来自分类Dev

HTTP POST请求失败,使用打字稿在Angular 2中以空值作为响应

来自分类Dev

使用打字稿在 JSON 中循环数组

来自分类Dev

打字稿-在多维对象中查找匹配的键和路径

来自分类Dev

如何获取打字稿记录中的值的键

来自分类Dev

从打字稿中的值获取枚举的键

来自分类Dev

打字稿:使用其他类型的键定义类型

来自分类Dev

在打字稿界面键迭代中使用条件类型

来自分类Dev

打字稿:使用元组作为rest参数有什么意义?

来自分类Dev

打字稿:使用get / set作为公共功能

来自分类Dev

打字稿:接口键枚举

来自分类Dev

如何从打字稿中的日期中减去n天

来自分类Dev

打字稿模块作为功能

来自分类Dev

使用protobuf对象作为std :: map中的键

Related 相关文章

热门标签

归档