2017-09-24 49 views
1
閱讀可變數量的屬性

說我有此功能的簽名:從對象

export const readVariableProps = function(obj: Object, props: Array<string>) : any { 

    // props => ['a','b','c'] 
    return obj['a']['b']['c']; 

} 

明顯,道具是可變長度數組,一個未知的列表或屬性從給定對象來讀取。

是獲得這種動態行爲使用eval()的唯一方法?

我該怎麼做?

+0

做你想做[OBJ [ '一'],OBJ [ 'B'],.. 。]按照你的標題?或obj [a] [b] ...按照您的代碼示例? –

+0

我認爲jfriend00得到了我想找的東西,謝謝壽 –

回答

1

要得到return obj['a']['b']['c'];相當於其中'a''b''c'是數組中的值就像你展示你的問題,你可以做這樣的事情(你可能有一些細節轉化爲打字稿):

export const readVariableProps = function(obj: Object, props: Array<string>) : any { 
    return props.reduce(function(prior, next) { 
     return prior[next]; 
    }, obj); 
} 

僅供參考,這種類型的場景正是.reduce()設計的 - 積累了通過訪問數組中的每個項目而構建的值。

如果除數組中最後一個屬性以外的任何內容不存在,則會拋出。

1

可以使用for..of循環的變量設置爲每個嵌套財產

const props = ['a','b','c']; 
 
const obj = {a:{b:{c:123}}}; 
 

 
let res; 
 
for (let prop of props) res = !res ? obj[prop] : res[prop]; 
 

 
console.log(res);