如何访问给定动态键的嵌套对象的属性?

时间:2019-04-15 09:19:16

标签: javascript

我有一个不知道其结构的嵌套对象。例如:

const nestedObject = {
  "one": {
    "two": {
       "three": 3
     }
  }
}

我想显示three的值。

我有一个这样的数组,所以我知道如何导航对象以便到达three

const keys = ["one", "two", "three"]

这不必采用这种结构。

那么鉴于上面的one.two.three数组,我该如何访问keys?或其他一些数据结构。我当时正在考虑进行递归,但是它似乎太复杂了,我觉得这里有一个简单的解决方案。

2 个答案:

答案 0 :(得分:6)

您可以使用简单的Array.prototype.reduce()函数来做到这一点:

const data = {
  "one": {
    "two": {
       "three": 3
     }
  }
};

const keys = ["one", "two", "three"];

const value = keys.reduce((a, v) => a[v], data);

console.log(value);

答案 1 :(得分:0)

您可以使用MyObject["fieldName"]访问子对象。然后,您可以使用递归函数,该函数将使用包含索引的数组在对象中漫游

let MyObj = {
  "one": {
    "two": {
       "three": 3
     }
  }
};

let Keys = ["one", "two", "three"];

function getValue(obj, arrIndexes, index = 0)
{
  let currentIndex = arrIndexes[index];
  let currentObject = obj[currentIndex];
  
  if (index < arrIndexes.length - 1)
  {
    return getValue(currentObject, arrIndexes, index + 1)
  }
  else
  {
    return currentObject;
  }
}

console.log(getValue(MyObj, Keys));