說我有此功能的簽名:從對象
export const readVariableProps = function(obj: Object, props: Array<string>) : any {
// props => ['a','b','c']
return obj['a']['b']['c'];
}
明顯,道具是可變長度數組,一個未知的列表或屬性從給定對象來讀取。
是獲得這種動態行爲使用eval()
的唯一方法?
我該怎麼做?
說我有此功能的簽名:從對象
export const readVariableProps = function(obj: Object, props: Array<string>) : any {
// props => ['a','b','c']
return obj['a']['b']['c'];
}
明顯,道具是可變長度數組,一個未知的列表或屬性從給定對象來讀取。
是獲得這種動態行爲使用eval()
的唯一方法?
我該怎麼做?
要得到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()
設計的 - 積累了通過訪問數組中的每個項目而構建的值。
如果除數組中最後一個屬性以外的任何內容不存在,則會拋出。
可以使用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);
做你想做[OBJ [ '一'],OBJ [ 'B'],.. 。]按照你的標題?或obj [a] [b] ...按照您的代碼示例? –
我認爲jfriend00得到了我想找的東西,謝謝壽 –