2016-01-25 150 views
3

我有一个对象内的对象,对象的名称可能会改变,我怎么能得到对象的对象内的值,而不是通过名称引用它?获取对象对象内的数据?

Object {medium-editor-1453741508068-0: Object} 
    medium-editor-1453741508068-0: Object 
    value: "this is what i want" 

这得到上面:

this.mediumEditor.editor.serialize(); 

我需要这样的东西:

this.mediumEditor.editor.serialize().childObject.value; 
+0

这取决于 - 你是如何得到这个物体的?是什么造成的以及你对它有多少控制?你可以决定它是什么类型的对象(并可能创建你自己的'对象'原型,你可以用它来查找特定的数据)。我的思想认为'getter'和'setter',这可能是理想的。我不得不提一下,你的示例对象对于你正在尝试完成的内容还不清楚。 – somethinghere

+0

我无法更改对象,它来自中等编辑器。 – panthro

+0

它会一直被命名为'medium-editor- ...'吗? – somethinghere

回答

4

如果顶层对象仅包含一个对象,你可以简单地使用Object.keys(topLevelObject)得到“对象的对象”名称。像下面这样:

var objectsObjectName = Object.keys(topLevelObject)[0]; 
var value = topLevelObject[objectsObjectName].value; 

同样的逻辑也可以递归使用,如果你有对象的嵌套的多层次,或者如果对象的对象的值的名称(哇,这是越来越难走)是不可预测的太。

您还可以循环顶级对象:

for (var key in topLevelObject) { 
    var value = topLevelObject[key].value; 
} 

这工作,即使你只有一个嵌套的对象,即使它可以说是怪异编写一个循环知道它只会循环一次。

+1

Wowzers,这很快!我发布了,立即看到了错误并进行了编辑...而你仍然拥有我。 现在你已经删除了你的评论,我看起来像我在跟自己说话。 – j11e

+2

为了安全起见,当然如果我们想要递归地使用它,你应该在'for'循环中使用'topLevelObject.hasOwnProperty(key)'来避免任何意外的和继承的部分妨碍。 – somethinghere

+2

@somethinghere:几乎可以肯定,是的,但不一定。对于实例,不是奇怪的情况,其中一些嵌套对象是从其他对象继承的对象(在这种情况下'hasOwnProperty'将返回false)。这里的“顶级对象”可能是一些嵌入式文本编辑器的内部对象,我们试图从它的内容中窥探它的价值。在这种情况下,编辑器可以继承其他一些对象。你永远不会知道。 – j11e