24 lines
		
	
	
		
			766 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			24 lines
		
	
	
		
			766 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| module.exports = function hasValues() {
 | |
|   return {
 | |
|     name: 'hasValues',
 | |
|     process: function(list, property) {
 | |
|       if (!list || !Array.isArray(list)) return false;
 | |
|       return list.some(item => readProperty(item, property.split('.'), 0));
 | |
|     }
 | |
|   };
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Search deeply into an object via a collection of property segments, starting at the
 | |
|  * indexed segment.
 | |
|  *
 | |
|  * E.g. if `obj = { a: { b: { c: 10 }}}` then
 | |
|  *  `readProperty(obj, ['a', 'b', 'c'], 0)` will return true;
 | |
|  * but
 | |
|  *  `readProperty(obj, ['a', 'd'], 0)` will return false;
 | |
|  */
 | |
| function readProperty(obj, propertySegments, index) {
 | |
|   const value = obj[propertySegments[index]];
 | |
|   return !!value && (index === propertySegments.length - 1 || readProperty(value, propertySegments, index + 1));
 | |
| }
 |