2016-01-25 240 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