最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to access property of nested object given dynamic keys? - Stack Overflow

programmeradmin0浏览0评论

I have a nested object of which I do not know the structure of. For example:

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

I wanted to display value of three.

I have an array like this so that I know how to navigate the object in order to get to three:

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

This doesn't have to be structured this way.

So how do I access one.two.three given the keys array above? Or some other data structure. I was thinking of doing a recursion, but it seems too plex and I feel like there is a simple solution out there.

I have a nested object of which I do not know the structure of. For example:

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

I wanted to display value of three.

I have an array like this so that I know how to navigate the object in order to get to three:

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

This doesn't have to be structured this way.

So how do I access one.two.three given the keys array above? Or some other data structure. I was thinking of doing a recursion, but it seems too plex and I feel like there is a simple solution out there.

Share Improve this question edited Apr 15, 2019 at 9:23 jeanl asked Apr 15, 2019 at 9:19 jeanljeanl 3892 gold badges7 silver badges19 bronze badges 2
  • Please post the JavaScript in a minimal reproducible example. If you haven't actually tried anything yet...do so. – zer00ne Commented Apr 15, 2019 at 9:21
  • 1 Possible duplicate of Convert JavaScript string in dot notation into an object reference – Kévin Bibollet Commented Apr 15, 2019 at 9:23
Add a ment  | 

2 Answers 2

Reset to default 11

You can do it with a simple Array.prototype.reduce() function:

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

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

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

console.log(value);

You can use MyObject["fieldName"] to access the sub object. And then, you can use a recursive function that will use the array containing the indexes to roam through the object

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

发布评论

评论列表(0)

  1. 暂无评论