2016-11-10 73 views
1

如果此標題沒有意義,但我無法找到描述此方法的道歉。我搜索了很多,但不斷獲得答案訪問單一級別。訪問嵌套對象鍵的變量名稱

我有一個對象:

var o = { 
    id: 1, 
    customer: { 
     name: 'Barry Scroggins' 
    } 
} 

我有一個訪問:

var keyName = 'customer' 

我知道我可以通過以下方式使用來獲取對象的客戶部分:

o[keyName] // { name: 'Barry Scroggins' } 

但是,在我的應用程序中,我想訪問客戶對象的'名稱'部分,使用動態創建的一組變量。所以我的應用程序產生了這個字符串:

var accessors = 'customer.name'; 

然後我分裂在'。'獲得一系列條目,但不管我嘗試什麼,我都無法直接訪問客戶名稱部分。

我知道我能做到這一點是這樣的:o['customer']['name'],但我需要動態地建立這些密鑰並有可能是任何數量的水平,以他們的(即customer.address.zipcode

這是可能的,或者是一個可怕的,可怕的方式來建立事物?如果是這樣,你有其他選擇嗎?

+0

雖然有可能,這是建立東西可怕,可怕的方式。把所有東西都放在var customer中,甚至不要創建var o。對於那些沒有更合理的選擇的人來說,請參考Nina Scholz的答案。 OP確實有更好的方法。 – TurnipEntropy

+0

@TurnipEntropy我同意,整個事情是一團糟,但幾乎所有的東西都從後端api放出,然後轉儲到用於呈現網頁的單個模板中。儘管重複,我更喜歡下面給出的答案。 –

回答

3

您可以拆分路徑並減少對象。

function getValue(o, path) { 
 
    return path.split('.').reduce(function (o, k) { 
 
     return (o || {})[k]; 
 
    }, o); 
 
} 
 

 
var o = { 
 
     id: 1, 
 
     customer: { 
 
      name: 'Barry Scroggins' 
 
     } 
 
    }, 
 
    accessors = 'customer.name'; 
 

 
console.log(getValue(o, accessors));