如何使用预定义的字符串读取嵌套对象的值

时间:2019-03-19 16:28:44

标签: javascript

我有一些拥有x个嵌套对象的对象:

let obj = {
 nestedObject: {
  key: value
 }
}

let obj2 = {
 nestedObject2: {
  nestedObject3: {
   key2: value2 
  }
 }
}

获取这两个对象的值并不困难:

obj.nestedObject.key 
obj['nestedObject']['key]

obj2.nestedObject2.nestedObject3.key2
obj2['nestedObject2']['nestedObject3']['key2']

这应该动态发生,但是我不知道该怎么实现。 我得到了上面结构的随机对象,还有一个字符串,告诉我在哪里可以找到值。对于上面示例中的obj2,我将获得字符串

  

“ nestedObject2.nestedObject3.key2”

如何使用此信息获取正确的值?上面的两种策略不再起作用,并且像

这样的简单方法
  

obj2 ['nestedObject2.nestedObject3.key2']

不幸的是没有工作。

1 个答案:

答案 0 :(得分:1)

您可以使用句点字符的分隔符来分割字符串,然后进行缩减以找到合适的属性,每次迭代都将其降级。

str.split(".").reduce((a, v) => (a = a[v], a), parent_object);

let o = {
    nestedObject2: {
      nestedObject3: {
        key2: "a key"
      }
    }
  },
  str = "nestedObject2.nestedObject3.key2";

let ref = str.split(".").reduce((a, v) => (a = a[v], a), o);

console.log(ref);