在我的项目中,我面临以下问题。我有一个非常复杂的结果对象,类似于以下内容:
results = {
a : { b : { c : value1 }},
d : value2,
e : { f : value3 }
}
我想获得一种动态的方法来基于astring这样的特定值:
//example 1
const string = '.a.b.c';
const value = results['a']['b']['c']; // = value1
// example 2
const string2 = '.e.f';
const value2 = results['e']['f']; // = value3
我从不事先知道我需要的价值有多“深”。 (直接键,子键,子子键...)
我首先分割字符串并获取数组中的键:
const keys = string.split('.') // = ['a','b','c']
,但是我看不到如何动态地获得所需的价值。我可以针对具有1,2,3或4(或更多个)键的情况做出if语句,但是我确信可以有一种动态的更干净的方式来管理此情况。有人知道吗?
有关信息,if语句应为
if (keys.length === 1) {
value = results[keys[0]];
} else if (keys.length === 2) {
value = results[keys[0]][keys[1]];
} // and so on...
答案 0 :(得分:1)
您可以使用split
和reduce
来实现这一目标
let results = {
a : { b : { c : 'value1' }},
d : 'value2',
e : { f : 'value3' }
}
function getValue(str) {
return str.split('.').reduce((o, d) => o[d], results)
}
console.log(getValue('a.b.c'))
console.log(getValue('e.f'))