[Javascript] Safe Nested Object Inspection

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));
})
原文地址:https://www.cnblogs.com/Answer1215/p/5129033.html