2017-06-26 59 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

非常出色,谢谢! –

相关问题