2017-06-16 131 views
2

如何使用鍵數組從一個嵌套對象中獲取值?JavaScript - 從嵌套對象中檢索值,使用鍵數組

// my sample object 
var obj = { 
    type   : "Purchase", 
    category  : "Apartment", 
    categoryOptions : { 
     apartment : { 
      floors : { 
       type  : "number", 
       value  : null, 
       placeholder : "Total Floors" 
      }, 
     }, 
    }, 
} 
var keysArray = ["value", "floors", "apartment", "categoryOptions"] 

我試圖使用array.reduceRight來實現這一目標,但無法使其工作。

這裏是我已經試過:

var roadToValue = keysArray.reduceRight(
    function(previousValue, currentValue){ 
     return previousValue + "[" + currentValue + "]" ; 
    } 
); 
// above function results in a single string like 
// "categoryOptions[apartment][floors][value]" 
// which off-course can't be used as object key 
// and obj[roadToValue] results in 'undefined' 

有沒有什麼辦法讓我能得到正確的密鑰傳遞到這裏OBJ?

+0

資本? ''公寓'!=「公寓」' – corn3lius

+0

@ corn3lius哦,它寫了一個錯誤的問題。我的問題依然存在。我會更新這個問題。 – Taxellool

回答

4

你肯定可以用reduceRight這個。問題是,你創建一個字符串,但是你需要通過你的對象initialValue和使用方括號標記:

var obj = {"type":"Purchase","category":"Apartment","categoryOptions":{"apartment":{"floors":{"type":"number","value":null,"placeholder":"Total Floors"}}}} 
 
var keysArray = ["value", "floors", "apartment", "categoryOptions"] 
 

 
var value = keysArray.reduceRight((r, e) => r[e] || r, obj) 
 
console.log(value)

+0

我包含了一個未定義的檢查,現在它會返回發生錯誤的對象。 – Christoph