假设我有一个如下所示的对象:
var SomeObject = {
'6.2013' : SomeArray1,
'7.2013' : SomeArray2,
'8.2013' : SomeArray3,
'9.2013' : SomeArray4
};
然后,在我的代码中的某个地方,我有一个我设置的全局变量:
CurrentObject = SomeObject['7.2013'];
现在我的代码中的其他地方,我需要知道CurrentObject
指向的密钥。基本上,我需要这样做:
var SomeObjectKey = .....(CurrentObject);
那就是字符串'7.2013'
。
感谢您的建议。
答案 0 :(得分:2)
found = Object.keys(SomeObject).filter(function(key) {
return SomeObject[key] === CurrentObject
})
返回一个“指向”该值的键列表(可以有多个键)。
正如评论中所指出的,这在IE8和Netscape导航器,Mosaic 1.2.3以及可能是Lynx for DOS中都不起作用,以防任何人给出...
如果您迫切需要支持过时的引擎,请不要使代码瘫痪,保持现代,美观和干净,并使用垫片修补损坏的部件。
答案 1 :(得分:1)
没有“标准”调用来执行此操作,您必须迭代对象的所有键,直到找到其值与所需值匹配的键。
请注意,如果您的值是“对象类型”(即包括数组),则直接===
(或==
)测试将仅比较参考相等性(即两个数组实际上是完全相同的两个数组)而不是他们的内容是相等的。
根据thg435的回答,您可以添加此功能:
Object.keysFor(obj, value) = function() {
return Object.keys(obj).filter(function(key) {
return obj[key] === value;
}
}
用法:
var SomeObjectKey = Object.keysFor(SomeObject, CurrentObject);
对于旧版浏览器,可在MDN网站上找到Object.keys
和Array.prototype.filter
的填充程序。
答案 2 :(得分:1)
简单的跨浏览器方式是迭代:
var SomeObject = {
'6.2013' : 'SomeArray1',
'7.2013' : 'SomeArray2',
'8.2013' : 'SomeArray3',
'9.2013' : 'SomeArray4'
};
var CurrentObject = SomeObject['7.2013'],
SomeObjectKey;
for (key in SomeObject) {
if (SomeObject[key] == CurrentObject) SomeObjectKey = key;
}
console.log(SomeObjectKey); // returns 7.2013