我正在将使用hashmap库的一些代码移植到ES6 Map。但是,我遇到了一个问题,即我现有的地图是用数组键控的。查找时间,生成等效数组并用作查找键。使用HashMap
,这很好,因为复杂的键以与深度比较相当的方式进行哈希处理。另一方面,ES6的Map
对密钥执行严格的相等比较。
我查找键的旧方法:
var h = new HashMap();
var k = [1,2,3];
h.set(k, 'foo');
h.has([1,2,3]) // returns true
在ES6下,由于严格的相等比较,该方法不起作用。
var m = new Map();
var k = [1,2,3];
m.set(k, 'foo');
m.has([1,2,3]) // returns false
有没有办法强制给定比较函数,或者以一种通过深度比较而不是严格相等来查找复杂键的方式重载get()
?我还没有能够创建一个Map
子类,而没有通过密钥进行线性搜索,这完全破坏了我在使用本机类型时所获得的任何效率提升。第一名。