initial attmept to add search
This commit is contained in:
		
							parent
							
								
									4c2f0cdfdf
								
							
						
					
					
						commit
						1e9c50dc9e
					
				
					 1 changed files with 378 additions and 296 deletions
				
			
		|  | @ -84,25 +84,36 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) { | |||
|     let DATA_SELECTED = DATA_ALL; | ||||
| 
 | ||||
|     // Pull the data out.
 | ||||
| 		if (DATA_ALL && DATA_PATH && (DATA_PATH != null) ? DATA_PATH.length > 0 : false) { | ||||
|     if ( | ||||
|       DATA_ALL && DATA_PATH && DATA_PATH != null ? DATA_PATH.length > 0 : false | ||||
|     ) { | ||||
|       let DATA_PATH_SELECTED = String(DATA_PATH.shift()).trim(); | ||||
| 
 | ||||
|       // Get the selected data.
 | ||||
|       DATA_SELECTED = DATA_ALL[DATA_PATH_SELECTED]; | ||||
| 
 | ||||
|       // must run if there is actually a parameter to test
 | ||||
| 			if (DATA_PATH.length > 0 || (((PARAMETER_TEST != null) ? PARAMETER_TEST.length > 0 : false) ? PARAMETER_TEST[`field`] : false)) { | ||||
|       if ( | ||||
|         DATA_PATH.length > 0 || | ||||
|         ((PARAMETER_TEST != null ? PARAMETER_TEST.length > 0 : false) | ||||
|           ? PARAMETER_TEST[`field`] | ||||
|           : false) | ||||
|       ) { | ||||
|         // Recursively run to make use of the existing data.
 | ||||
|         DATA_SELECTED = find_data(DATA_SELECTED, DATA_PATH, PARAMETER_TEST); | ||||
|       } | ||||
| 		} else if ((PARAMETER_TEST) ? (!!PARAMETER_TEST[`field`] && !!PARAMETER_TEST[`test value`]) : false) { | ||||
|     } else if ( | ||||
|       PARAMETER_TEST | ||||
|         ? !!PARAMETER_TEST[`field`] && !!PARAMETER_TEST[`test value`] | ||||
|         : false | ||||
|     ) { | ||||
|       let QUALIFIED = false; | ||||
|       let DATA_SELECTED_KEYS = Object.keys(DATA_SELECTED); | ||||
| 
 | ||||
|       // Perform a sequential search.
 | ||||
|       for ( | ||||
|         let DATA_SELECTED_KEY_INDEX = 0; | ||||
| 				(DATA_SELECTED_KEY_INDEX < DATA_SELECTED_KEYS.length) && !QUALIFIED; | ||||
|         DATA_SELECTED_KEY_INDEX < DATA_SELECTED_KEYS.length && !QUALIFIED; | ||||
|         DATA_SELECTED_KEY_INDEX++ | ||||
|       ) { | ||||
|         PARAMETER_TEST[`value`] = | ||||
|  | @ -113,8 +124,7 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) { | |||
|           QUALIFIED = | ||||
|             new RegExp(String(PARAMETER_TEST[`value`])).test( | ||||
|               PARAMETER_TEST[`test value`], | ||||
| 						) || | ||||
| 						PARAMETER_TEST[`test value`].includes(PARAMETER_TEST[`value`]); | ||||
|             ) || PARAMETER_TEST[`test value`].includes(PARAMETER_TEST[`value`]); | ||||
|         } | ||||
| 
 | ||||
|         if (QUALIFIED) { | ||||
|  | @ -127,7 +137,9 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) { | |||
|       if (!QUALIFIED) { | ||||
|         DATA_SELECTED = null; | ||||
|       } | ||||
| 		} else {return (null);} | ||||
|     } else { | ||||
|       return null; | ||||
|     } | ||||
| 
 | ||||
|     // Now return the data.
 | ||||
|     return DATA_SELECTED; | ||||
|  | @ -168,6 +180,76 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) { | |||
|   return DATA_RETURNED[`value`]; | ||||
| } | ||||
| 
 | ||||
| /* More enhanced searching. | ||||
| 
 | ||||
| @param {Array} SOURCE the source of the data | ||||
| @param {string} TERM the term to search | ||||
| @param {Array} ADDITIONAL_PLACES additional places to search | ||||
| @return {Array} the results | ||||
| */ | ||||
| export function search(SOURCE, TERM, VALUE, ADDITIONAL_PLACES, STRICT = false) { | ||||
|   let DATA = read(SOURCE); | ||||
|   let RESULTS; | ||||
| 
 | ||||
|   if (DATA) { | ||||
|     RESULTS = {}; | ||||
| 
 | ||||
|     if (TERM) { | ||||
|       // Sequentially search through the data, first by key.
 | ||||
|       for (let DATA_NAME in Object.keys(DATA)) { | ||||
|         if (STRICT) { | ||||
|           if ( | ||||
|             STRICT | ||||
|               ? DATA_NAME == TERM | ||||
|               : DATA_NAME.includes(TERM) || TERM.includes(DATA_NAME) | ||||
|           ) { | ||||
|             RESULTS[`DATA_NAME`] = DATA[DATA_NAME]; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       // Then, get the additional places.
 | ||||
|       if ( | ||||
|         (ADDITIONAL_PLACES != null ? Array.isArray(ADDITIONAL_PLACES) : false) | ||||
|           ? ADDITIONAL_PLACES.length > 0 | ||||
|           : false | ||||
|       ) { | ||||
|         for (let FIELD_NAME in ADDITIONAL_PLACES) { | ||||
|           let RESULT = read(SOURCE, 0, { | ||||
|             field: FIELD_NAME, | ||||
|             "test value": TERM, | ||||
|           }); | ||||
|           if (RESULT) { | ||||
|             RESULTS = Object.assign( | ||||
|               {}, | ||||
|               RESULTS, | ||||
|               search(SOURCE, null, RESULT, null, true), | ||||
|             ); | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } else if (VALUE) { | ||||
|       for (let ENTRY in (typeof SOURCE).includes(`obj`) && | ||||
|       !Array.isArray(SOURCE) && | ||||
|       SOURCE != null | ||||
|         ? Object.keys(SOURCE) | ||||
|         : SOURCE) { | ||||
|         if ( | ||||
|           (typeof SOURCE).includes(`obj`) && !Array.isArray(SOURCE) | ||||
|             ? SOURCE[ENTRY] == VALUE | ||||
|             : false | ||||
|         ) { | ||||
|           RESULTS[ENTRY] = VALUE; | ||||
|         } else if (SOURCE[ENTRY] == VALUE) { | ||||
|           RESULTS[SOURCE.indexOf(ENTRY)] = VALUE; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   return RESULTS; | ||||
| } | ||||
| 
 | ||||
| /* Write the data on the selected prefname. | ||||
| 
 | ||||
| @param {string} PATH the preference name | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue