How to avoid 'undefined' errors in nested objects

  • A+
Category:Languages

I'm looking for some good strategies for avoiding errors in JavaScript when using dot notation to call the children of children in objects that may or may not exist.

At the bottom of the code snippet below is an example of a solution that works, but is inelegant (at best).

It would be great to see some native JavaScript solutions or even external libraries that can help avoid this kind of error.

const object1 = {   foo: {     bar: {       baz: 'payload'     }   } };   const object2 = {};  const array = [object1, object2];  // this will fail on object2 because obj.foo is undefined array.forEach(obj => {     if (obj.foo.bar.baz) {       console.log(obj.foo.bar.baz);      } else {       console.log('undefined');      }   }  );  // this will work, but it's horrible to write all those nested if statements. array.forEach(obj => {     if (obj) {       if (obj.foo) {         if (obj.foo.bar) {           if (obj.foo.bar.baz) {           console.log(obj.foo.bar.baz);           }         }       }     } else {       console.log('undefinded');     }   } );

 


Lodash already did it for us: https://lodash.com/docs#get

const object = { 'a': [{ 'b': { 'c': 3 } }] };  _.get(object, 'a[0].b.c'); // => 3  _.get(object, ['a', '0', 'b', 'c']); // => 3  _.get(object, 'a.b.c', 'default'); // => 'default' 

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: