2017-06-26 58 views
0

我有一個對象:有沒有辦法訪問對象文字的名字?

var Top = { 
    'A':{}, 
    'b':{ 
     '1':'someText', 
     '2':'someMoreText'}, 
    'C':{ 
     '3':'evenMoreText', 
     '4':'thisIsGettingRedundant'}, 
    'D':'thisOneIsDifferent'} 

我正在尋找一種方式來訪問我的對象的名稱,如Top[b].objectName將返回'Top'作爲一個字符串,我裏面的一些嵌套做這... in循環,像這樣:

for(thing in Top){ 
    for(piece in Top[thing]){ 
     console.log('Grabbing ' + Top[thing][piece] + ' from ' + MY_OBJECT_NAME_THAT_SHOULD_BE_TOP); 
    } 
} 

我想我可以一個標籤添加到每個對象的名字,但似乎是多餘的,我(IE從{}到「頂」更改)。

- 編輯:

是有記錄我的第二個級別對象名稱IE的方式。 A,B,C?因爲他們應該被記錄爲數據而不是代碼

+1

這看起來像是代碼被縮小時會破壞的東西。簽出[在JavaScript中的變量名字符串](https://stackoverflow.com/questions/4602141/variable-name-as-a-string-in-javascript) – byxor

+1

有[this](https:// stackoverflow。 com/a/24100885/7852370)的方法,您可以在這裏查看全局'Window'中的所有屬性,並找到與您的對象匹配的一個。 –

+2

有沒有辦法做到這一點,因爲一個對象可以被許多變量引用,例如'a = b = c = {}',解釋器沒有機制讓你知道你想要命名哪個變量。 –

回答

0
const Top = { 
    'A': {}, 
    'b': { 
    '1': 'someText', 
    '2': 'someMoreText' 
    }, 
    'C': { 
    '3': 'evenMoreText', 
    '4': 'thisIsGettingRedundant' 
    }, 
    'D': 'thisOneIsDifferent' 
}; 

爲了實現這一點,使用了在環超過遍歷所有鍵@頂層。如果鍵指向一個對象並且不等於null(在JavaScript中定義爲對象),則執行另一個for-in-loop將每個項目記錄到控制檯中。如果頂級關鍵點指向空對象,請將空的彎曲括號記錄到控制檯。另一方面,如果頂級關鍵點指向非對象,則將其記錄到控制檯。

for(let key in Top) { 
    if(typeof Top[key] === 'object' && Top[key] !== null) { 
    for(let item in Top[key]) { 
     console.log(`Grabbing ${Top[key][item]} from '${item}' within '${key}' in Top.`); 
    } 

    if(Object.keys(Top[key]).length === 0) { 
     console.log(`Grabbing {} from '${key}' in Top.`); 
    } 
    } else { 
    console.log(`Grabbing ${Top[key]} from '${key}' in Top.`); 
    } 
} 
+0

非常出色,謝謝! –

相關問題