如何检查Javascript Map是否具有对象密钥

Los*_*der 4 javascript dictionary

看几个不同的文档,我所看到的只是Map(ECMAScript6)键是布尔值,字符串还是整数。有没有一种方法可以使用另一个自定义对象(通过新的CustomObject(x,y)构造函数调用来调用)添加为键?

我能够将一个对象添加为键,但是无法检查Map是否具有所述对象。

var myMap = new Map();
myMap.set( new Tuple(1,1), "foo");
myMap.set('bar', "foo");


myMap.has(?);  
myMap.has('bar');  // returns true
Run Code Online (Sandbox Code Playgroud)

有没有解决的办法?

  var myMap = new Map();
  myMap.set( new Tuple(1,1), "foo");

 for(some conditions) {
 var localData = new Tuple(1,1); //Use directly if exists in myMap? 
 map.has(localData) // returns false as this is a different Tuple object. But I need it to return true
}
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map/has

sbk*_*ing 5

您只需要保存对对象的引用:

var myMap = new Map();
var myKey = new Tuple(1,1);
myMap.set( myKey, "foo");
myMap.set('bar', "foo");

myMap.has(myKey);           // returns true;  myKey === myKey
myMap.has(new Tuple(1,1));  // returns false; new Tuple(1,1) !== myKey
myMap.has('bar');           // returns true;  'bar' === 'bar'
Run Code Online (Sandbox Code Playgroud)

编辑:这是如何使用对象来实现所需的方法,即通过对象的值而不是引用来比较对象:

function Tuple (x, y) {
  this.x = x;
  this.y = y;
}
Tuple.prototype.toString = function () {
  return 'Tuple [' + this.x + ',' + this.y + ']';
};

var myObject = {};
myObject[new Tuple(1, 1)] = 'foo';
myObject[new Tuple(1, 2)] = 'bar';
console.log(myObject[new Tuple(1, 1)]); // 'foo'
console.log(myObject[new Tuple(1, 2)]); // 'bar'
Run Code Online (Sandbox Code Playgroud)

这些操作平均将以恒定时间运行,这比在线性时间内通过Map搜索相似的对象键要快得多。