2016-11-04 81 views
1

我需要澄清一些術語,因爲現在我的項目在引用變量時有一些術語混合。(術語)如何引用變量內的變量?

考慮這樣定義的對象:

var anObject = { 
    a: { 
     value1: 1337, 
     value2: 69, 
     value3: "420 man" 
    } 
} 

請糾正我,如果我錯了,但我相信a對象anObject財產

但是在anObject的情況下,我應該如何參考value1?這是「財產」嗎?

我問的原因是我需要創建函數來訪問對象的「變量內的變量」。喜歡這樣:

function getProperty(name) { 
    // ... 
} 

var theValueImLookingFor = getProperty("a.value1"); 

如果這個問題是不合適的堆棧溢出,請讓我知道,我應該爲這個問題吧。由於

編輯:我不問如何訪問嵌套變量,我問如何引用它的術語。

鑑於value1a的財產,這是anObject的財產。什麼是value1anObject?這是「財產 - 財產」嗎?我的意思不是聽起來很隨意,但我怎麼稱呼它?

+0

有時稱爲*對象圖導航*。 – Pointy

+1

請注意,這裏根本沒有JSON。 JSON是一種文本數據格式。你所擁有的只不過是JavaScript對象。 – Cerbrus

+0

'anObject.a.value1'。在函數中,你需要用'.'字符來分割你的屬性,然後你可以像'anObject ['a'] ['value1'];' – vaso123

回答

2

以同樣的方式,aanObject的財產,value1a的財產。

因此,你可以通過訪問它:

就是這樣。長的答覆是,這可以分解爲如下代碼:

const innerObject = anObject.a; 
const result = innerObject.value1; 

請注意,在JavaScript中的對象是什麼,但鍵值對的列表,即一本字典。你可以使用任何數據類型作爲值,甚至是另一個對象,所以你最終得到嵌套的對象 - 這正是你在這裏所擁有的。

所以對於你所說的函​​數,你所需要做的就是將給定的字符串按其分隔符char(例如.)拆分,然後遞歸地遍歷對象樹,直到找到你想要的位置。

請注意,例如,在npm上已經有完成這個的現成模塊,例如nested-keys(只是任意指定一個,還有很多其他模塊可以執行相同或至少相似的任務)。

即使非常常用的庫(如Lodash)也提供了這種功能,所以很有可能您無需爲自己編寫代碼,但可以使用這種現成的功能脫身。例如。,您可以使用[獲取](Lodash的https://lodash.com/docs/4.16.6#get]

var object = { 'a': [{ 'b': { 'c': 3 } }] }; 

_.get(object, 'a[0].b.c'); 
// => 3 

_.get(object, ['a', '0', 'b', 'c']); 
// => 3 

_.get(object, 'a.b.c', 'default'); 
// => 'default' 

(此示例代碼從鏈接Lodash文件採取get

如果你仍然想創建您自己的實現,有。看看Lodash的源代碼可能是一個很好的起點。

UPDATE

關於你的編輯,我不認爲有一個爲官一任這個。您可以將其稱爲嵌套屬性或子對象的屬性。我想我寧願描述,因爲你原來是這樣做的:value1是屬性爲anObject屬性的物件。這並不優雅,但技術上是正確的,正如我所說,我認爲沒有更好的(官方)術語。

+0

我想OP想知道,如果給定一個對象圖中葉子值的「路徑」的字符串表示形式,可以檢索該值。當屬性名稱固定時,您的答案有效,但情況並非總是如此。 – Pointy

+0

沒錯。我更新了我的答案以更好地適應這個問題。 –

+0

請參閱我的編輯,我不問如何訪問變量。我在問如何引用它,或者如果我要描述它,該怎麼稱呼它...... – gromit190