获取引用值的对象属性的键

getting key of object property that references a value

本文关键字:属性 对象 获取 引用      更新时间:2023-09-26

假设我有一个看起来像这样的对象:

var SomeObject = {
   '6.2013' : SomeArray1,
   '7.2013' : SomeArray2,
   '8.2013' : SomeArray3,
   '9.2013' : SomeArray4
};

然后,在我的代码中的某个地方,我有一个全局变量,我设置了如下:

CurrentObject = SomeObject['7.2013'];

现在,在我的代码中的其他地方,我需要知道CurrentObject指向的键。基本上,我需要这样做:

var SomeObjectKey = .....(CurrentObject); 

这就是字符串'7.2013'.

感谢您的建议。

found = Object.keys(SomeObject).filter(function(key) { 
   return SomeObject[key] === CurrentObject
})

返回"指向"值的键列表(可以有多个键(。

正如评论中指出的那样,这在IE8和Netscape导航器,Mosaic 1.2.3以及DOS的Lynx中都不起作用,以防万一有人给出...

如果你迫切需要支持过时的引擎,不要削弱你的代码,保持它的现代、漂亮和干净,并使用垫片来修补损坏的部分。

简单的跨浏览器方式是迭代:

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

小提琴

没有"标准"调用来执行此操作,您必须遍历对象的所有键,直到找到其值与所需值匹配的键。

请注意,如果您的值是"对象类型"(即包括数组(,那么直接===(或==(测试将仅比较参考相等性(即两个数组实际上是完全相同的两个数组(,而不是它们的内容相等。

根据 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.keysArray.prototype.filter的填充程序。