A common problem when dealing with some kinds of data is that not every object has the same nested structure. lukeskywalker.parents.father.isjedi works, but anakinskywalker.parents.father.isjedi throws an exception, because anakin_skywalker.parents.father is undefined. But we can reduce a path to provide safe default values and avoid exceptions when walking the same path on non-homogenous objects
let han, anakin, luke; han = { name: 'han', parents: { father: { jedi: true, }, mother: { jedi: false } } }; anakin = { name: 'anakin', parents: { father: { jedi: false, }, mother: { jedi: false } } }; luke = { name: "luke", parents: { mother: { jedi: false } } }; let worries = [ han, anakin, luke ]; function fatherIsJedi(person){ let path = "parents.father.jedi"; return path.split('.').reduce( (acc, curr)=>{ if(acc){ return acc[curr]; } return false; }, person ); }; worries.forEach( (person)=> { console.log(`${person.name}'s fathter is a Jedi: `, fatherIsJedi(person)); })