ICoded
ICoded

Reputation: 341

How to get JSON entry from returned objects

I got JSON data, like:

{ 
  "id": 1,
  "active": true,
  "dependency": [
        { "id": 2 }
        { "id": 3 }
   ]
},
{
  "id": 2,
  "active": true
},
{
  "id": 3,
  "active": true
}

I want to retrieve the "active" value for each dependency in the id 1 object. So far I used a forEach to get those dependency.

thisElement.dependency.forEach(function(id) {
           console.log(id)
}

Which returns id 2 and id 3 as objects. Is there a way to use id.active straight away? By using only one loop? Because the result so far are objects without any connection to the related JSON data. Would it require to loop through the whole JSON data to retrieve those values?

Upvotes: 0

Views: 49

Answers (1)

charlietfl
charlietfl

Reputation: 171690

The most efficient thing to to is create a hashmap with an Object or Map first so you only need to iterate the array once to find dependency related values.

You could do it by using Array#find() to search whole array each time but that is far more time complexity than the o(1) object lookup

const activeMap = new Map(data.map(obj  => [obj.id, obj.active]))

data[0].dependency.forEach(({id}) => console.log(id ,'  active: ' , activeMap.get(id)))
<script>
const data =
[
  {
    "id": 1,
    "active": true,
    "dependency": [
      {"id": 2 },
      {"id": 3}
    ]
  },
  {
    "id": 2,
    "active": false
  },
  {
    "id": 3,
    "active": true
  }
]
</script>

Upvotes: 1

Related Questions