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

时间:2011-12-16 18:30:44

标签: javascript actionscript-3 dictionary reference associative-array

我正在寻找使用对象作为键的关联映射/数组/散列的javascript方式。使用flash.utils.Dictionary替代ActionScript 3中的操作。我确信java和C#也有类似的东西。

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

伪代码:

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

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

有什么想法吗?

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

1 个答案:

答案 0 :(得分:0)

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

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

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