In this lesson we'll see how Ramda's path
and pathOr
functions can be used to safely access a deeply nested property from an object while avoiding the dreaded checks for undefined
at each new property in the desired path.
const R = require('ramda');const {path, pathOr} = R;const acctDept = { name: 'Accounts Payable', location: '14th floor', personnel: { manager: { fName: 'Bill', lName: 'Lumberg', title: 'director of stuff and things', salary: 75000 } }};const itDept = { name: 'IT', location: 'remote', personnel: {}};// path: will return undefined if cannot find propconst getMrgLastName = path(['personnel', 'manager', 'lName']);const getMrgLastNameOrDefaultVal = pathOr('Nobody', ['personnel', 'manager', 'lName'])const res = getMrgLastName(acctDept);console.log("res:", res); // Lumbergconst res2 = getMrgLastName(itDept);const res3 = getMrgLastNameOrDefaultVal(itDept);console.log("res2:", res2); // undefinedconsole.log("res3:", res3); // Nobody