Javascript-根据密钥字符串从对象动态获取子值

时间:2018-11-22 13:31:44

标签: javascript arrays object

在我的项目中,我面临以下问题。我有一个非常复杂的结果对象,类似于以下内容:

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...

1 个答案:

答案 0 :(得分:1)

您可以使用splitreduce来实现这一目标

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'))