簡體   English   中英

獲取引用值的對象屬性的鍵

[英]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.keysArray.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM