add nested dictionary search
This commit is contained in:
		
							parent
							
								
									3e2723d58b
								
							
						
					
					
						commit
						98ea6ede65
					
				
					 1 changed files with 79 additions and 5 deletions
				
			
		|  | @ -1,5 +1,6 @@ | |||
| class nested {} | ||||
| import { RegExManager } from "./RegExManager.js"; | ||||
| 
 | ||||
| class nested {} | ||||
| nested.dictionary = class dictionary { | ||||
|      /* | ||||
|      Get the data from the dictionary. | ||||
|  | @ -70,6 +71,79 @@ nested.dictionary = class dictionary { | |||
|           // Return the value.
 | ||||
|           return (DATA); | ||||
|      } | ||||
| } | ||||
| 
 | ||||
|     	/* More enhanced searching. | ||||
| 
 | ||||
| 	@param {object} data the data | ||||
| 	@param {string} value the value to search | ||||
| 	@param {object} options the options | ||||
| 	@return {object} the results | ||||
| 	*/ | ||||
| 	static search(data, value, options) { | ||||
| 		// Set the default options.
 | ||||
| 		let OPTIONS = Object.assign({}, {"strictness": 0}, options); | ||||
| 		let DATA = data; | ||||
| 		let TERM = value; | ||||
| 		let RESULTS; | ||||
| 
 | ||||
| 		if (data && ((typeof data).includes(`obj`) && !Array.isArray(data))) { | ||||
| 			if (!TERM || ((typeof TERM).includes(`str`) ? !TERM.trim() : false)) { | ||||
| 				RESULTS = data; | ||||
| 			} else { | ||||
| 				RESULTS = {}; | ||||
| 
 | ||||
| 				// Sequentially search through the data, first by key.
 | ||||
| 				if (OPTIONS[`mode`] != `criteria`) { | ||||
| 					(Object.keys(DATA)).forEach((DATA_NAME) => { | ||||
| 						if (OPTIONS[`strictness`] > 1 ? DATA_NAME == TERM : (DATA_NAME.includes(TERM) || TERM.includes(DATA_NAME))) { | ||||
| 							RESULTS[DATA_NAME] = DATA[DATA_NAME]; | ||||
| 						} | ||||
| 					}); | ||||
| 				}; | ||||
| 
 | ||||
| 				// Get the additional criteria.
 | ||||
| 				if ((OPTIONS[`mode`] != `root`) && OPTIONS[`criteria`]) { | ||||
| 					let ADDITIONAL_PLACES = (!Array.isArray(OPTIONS[`criteria`])) ? OPTIONS[`criteria`].split(`,`) : OPTIONS[`criteria`]; | ||||
| 
 | ||||
| 					// Search through the data.
 | ||||
| 					if (ADDITIONAL_PLACES) { | ||||
| 						// Perform a sequential search on the additional criteria.
 | ||||
| 						ADDITIONAL_PLACES.forEach((ADDITIONAL_PLACE) => { | ||||
| 							Object.keys(DATA).forEach((DATA_NAME) => { | ||||
| 								let VALUE = {}; | ||||
| 								VALUE[`parent`] = DATA[DATA_NAME]; | ||||
| 
 | ||||
| 								if (VALUE[`parent`] ? (typeof (VALUE[`parent`])).includes(`obj`) : false) { | ||||
| 									VALUE[`current`] = nested.dictionary.get(VALUE[`parent`], ADDITIONAL_PLACE); | ||||
| 
 | ||||
| 									console.log(RegExManager.test(VALUE[`current`]) ? (new RegExp(VALUE[`current`])).test(TERM) : `not`); | ||||
| 
 | ||||
| 									if (VALUE[`current`] | ||||
| 										? ((OPTIONS[`strictness`] >= 1) | ||||
| 											? VALUE[`current`] == TERM | ||||
| 											: ( | ||||
| 												((OPTIONS[`strictness`] < 0.5) | ||||
| 													? (VALUE[`current`].includes(TERM)) | ||||
| 													: false) | ||||
| 												|| TERM.includes(VALUE[`current`]) | ||||
| 												|| (RegExManager.test(VALUE[`current`]) | ||||
| 													? (new RegExp(VALUE[`current`])).test(TERM) | ||||
| 													: false))) | ||||
| 										: false) { | ||||
| 										RESULTS[DATA_NAME] = DATA[DATA_NAME]; | ||||
| 									}; | ||||
| 								}; | ||||
| 							}) | ||||
| 						}) | ||||
| 					}; | ||||
| 				}; | ||||
| 			}; | ||||
| 
 | ||||
| 		}; | ||||
| 
 | ||||
| 		// Return the results.
 | ||||
| 		return RESULTS; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| export {nested as default}; | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue