| // |
| 'use strict'; |
| |
| // Resolves property names or property paths defined with period-delimited |
| // strings or arrays of strings. Property names that are found on the source |
| // object are used directly (even if they include a period). |
| // Nested property names that include periods, within a path, are only |
| // understood in array paths. |
| function getPropertyByPath(source , path ) { |
| if (typeof path === 'string' && source.hasOwnProperty(path)) { |
| return source[path]; |
| } |
| |
| const parsedPath = typeof path === 'string' ? path.split('.') : path; |
| return parsedPath.reduce((previous, key) => { |
| if (previous === undefined) { |
| return previous; |
| } |
| return previous[key]; |
| }, source); |
| } |
| |
| module.exports = getPropertyByPath; |