Search code examples
javascriptarraysecmascript-5

Create a new JSON array from nested key/values of existing JSON array


I have an array of Objects which will always be structured like so:

var initialJSON = [  
  {  
     "id":"01",
     "name":"Jane",
     "project":{  
        "title":"Alpha",
        "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
        "city":"New York"
     },
     "dateCreated":"2018-04-28 04:11:16 UTC"
   },
   {  
     "id":"02",
     "name":"Sarah",
     "project":{  
       "title":"Beta",
       "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
       "city":"London"
     },
      "dateCreated":"2018-04-28 04:11:29 UTC"
    },
    {  
      "id":"03",
      "name":"Mia",
      "project":{  
         "title":"Gamma",
         "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
         "city":"Paris"
      },
      "dateCreated":"2018-04-28 04:11:29 UTC"
   }
];

My goal is to create a new array of Objects containing just the key/values of each item's projects. Essentially removing all of the other data (including the parent key 'project') from each item.

The end result would look like so:

var formattedJSON = [
  {
    "title":"Alpha",
    "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
    "city":"New York"
  },
  {
    "title":"Beta",
    "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
    "city":"London"
  },
  {
    "title":"Gamma",
    "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit",
    "Paris"
  }
]

I am having difficulty finding a way to loop through the data and achieve the correct result. I am aware there are similar questions already posted but non seem to create a new array out of the nested key/values of an inner key.


Solution

  • You can use Array#map() for this, by assigning each element of the array to it's project property:

    let initialJSON=[{"id":"01","name":"Jane","project":{"title":"Alpha","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"New York"},"dateCreated":"2018-04-28 04:11:16 UTC"},{"id":"02","name":"Sarah","project":{"title":"Beta","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"London"},"dateCreated":"2018-04-28 04:11:29 UTC"},{"id":"03","name":"Mia","project":{"title":"Gamma","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","city":"Paris"},"dateCreated":"2018-04-28 04:11:29 UTC"}];
    
    let result = initialJSON.map(element => element.project);
    
    console.log(result)