24 lines
		
	
	
		
			775 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			775 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| //      
 | |
| '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;
 |