[英]getting key of object property that references a value
假設我有一個看起來像這樣的對象:
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以及Lynx for DOS中也不起作用,以防萬一有人給...
如果您迫切需要支持過時的引擎,請不要破壞您的代碼,使其保持現代,美觀和干凈,並使用墊片來修補損壞的零件。
沒有“標准”調用可以執行此操作,您將必須遍歷對象的所有鍵,直到找到其值與所需值匹配的鍵為止。
請注意,如果您的值是“對象類型”(即包括數組),則直接的===
(或==
)測試將僅比較引用相等性(即,兩個數組實際上是與兩個數組完全相同),而不是它們的內容是相等的。
基於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
。
跨瀏覽器的簡單方法是迭代:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.