使用对象作为键(不是字符串而是唯一对象)的关联映射的javascript方法是什么?

What is the javascript approach to an associative map with objects as keys (not strings but unique objects)?

本文关键字:对象 关联 映射 javascript 是什么 方法 唯一 字符串      更新时间:2023-09-26

我正在寻找使用对象作为键的关联映射/数组/哈希的javascript方式。替代你可以在ActionScript 3中使用flash.utils.Dictionary。我相信java和c#也有类似的东西。

它的工作原理与普通的基于assoc[key]的通用对象相同,但不是基于字符串的属性,而是使用整个对象作为键(它将不匹配toString()像Object一样,而是在唯一的实例上)。非常方便地装饰你不拥有的对象(通过使用对象作为键和你的装饰作为值)。

伪代码:

decorations[objectA] = [lights, sparkles, ..];
decorations[objectB] = [skulls, spikes, ..];
if(someObject in decorations) 
    updateDecorations(someObject , decorations[someObject])

说明在javascript和为什么它不工作的对象:

// make two objects with same toString() return value
var objA = {toString:function(){return 'foo'}};
var objB = {toString:function(){return 'foo'}};
//use objects as keys
var assoc = {};
assoc[objA] = 'dataA';
assoc[objB] = 'dataB';
// seperate instances are not equal
console.log(objA == objB);
// still same data associated: dataB, dataB
console.log(assoc[objA]);   
console.log(assoc[objB]);
//with a Dictionary instead of this would be dataA, dataB

主要问题是我只需要匹配对象(它正在被一些其他进程使用,你不会干扰,但我们仍然需要关联)。所以没有神奇的。__hash道具或toString()重载(如果可能的话)。

任何想法?

编辑:我检查了一下,但它都是toString()或添加魔术道具

我不久前用JS写了一个字典类。它肯定不是理想的,因为它使用Array来存储值和键,但对于小型集合来说工作得很好。

你可以在这里找到它:https://github.com/creynders/creynders-js-lib

我做过类似的事情,将一个对象(19个图标中的1个)关联到地图上。我通过PHP从mysql中提取信息,并将地图上的所有内容与它们的X,Y坐标关联起来。

当我向所有图标添加mouse_rollover时,我只需循环遍历数组并找到匹配的X、Y坐标,并显示一个面板,其中包含导入到多维数组中的所有其他值。

你觉得这有帮助吗?如果是这样,我可以提供一些我用来做这件事的代码。jc