0

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

var SomeObject = {

   '6.2013' : SomeArray1,
   '7.2013' : SomeArray2,
   '8.2013' : SomeArray3,
   '9.2013' : SomeArray4
};

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

CurrentObject = SomeObject['7.2013'];

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

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

那就是字符串'7.2013'

感谢您的建议。

4

3 回答 3

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

返回一个“指向”该值的键列表(可以有多个)。

正如评论中所指出的,这在 IE8 以及 Netscape navigator、Mosaic 1.2.3 以及可能的 DOS 版 Lynx 中都不起作用,以防万一有人给出...

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

于 2013-06-09T21:58:20.617 回答
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

于 2013-06-09T21:58:38.307 回答
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

小提琴

于 2013-06-09T22:02:00.463 回答