javascript array of objects access properties

// The user object will be the test data for the notes taken below, 
// ALL NOTE ARE AND INFO CAN BE FOUND AT HACKERNOON! 
// THIS IS NOT MY WORK, I AM ONLY POSTING IT TO GREPPER FOR EASE OF USE OF FINDING THIS 
// MATERIAL LATER IF NEED BE!
// With that said enjoy the notes :D


const user = {    
  id: 101,    
  email: '[email protected]',    
  personalInfo: {        
    name: 'Jack',        
    address: {            
      line1: 'westwish st',            
      line2: 'washmasher',            
      city: 'wallas',            
      state: 'WX'        
    }    
  }
}

// To access the name of our user we will write:
const name = user.personalInfo.name;
const userCity = user.personalInfo.address.city;

// This is the easy and straight-forward approach

// But for some reason, if our user's personal info is not available, the object structure 
// will be like this:
const user = {
  id: 101,
  email: '[email protected]'
}

// Now if you try to access the name, you will be thrown "Cannot read property 'name' 
// of undefined"
const name = user.personalInfo.name; // Cannot read property 'name' of undefined

//This is because we are trying to access the name key from an object that does not exist

// The usual way how most devs deal with this scenario is
const name = user && user.personalInfo ? user.personalInfo.name : null;
// Undefined error will NOT be thrown as we check for existence before access

// This is okay if your nested structure is simple, but if you have your data nested 
// 5 or 6 levels deep, then your code will look really messy like this:

let city;
if (    
  data && data.user && data.user.personalInfo &&    
  data.user.personalInfo.addressDetails &&    
  data.user.personalInfo.addressDetails.primaryAddress   
  ) {    
    city = data.user.personalInfo.addressDetails.primaryAddress;
}

// for more information please visit:
// https://hackernoon.com/accessing-nested-objects-in-javascript-f02f1bd6387f