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;
|
let DATA_SELECTED = DATA_ALL;
|
||||||
|
|
||||||
// Pull the data out.
|
// 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();
|
let DATA_PATH_SELECTED = String(DATA_PATH.shift()).trim();
|
||||||
|
|
||||||
// Get the selected data.
|
// Get the selected data.
|
||||||
DATA_SELECTED = DATA_ALL[DATA_PATH_SELECTED];
|
DATA_SELECTED = DATA_ALL[DATA_PATH_SELECTED];
|
||||||
|
|
||||||
// must run if there is actually a parameter to test
|
// 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.
|
// Recursively run to make use of the existing data.
|
||||||
DATA_SELECTED = find_data(DATA_SELECTED, DATA_PATH, PARAMETER_TEST);
|
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 QUALIFIED = false;
|
||||||
let DATA_SELECTED_KEYS = Object.keys(DATA_SELECTED);
|
let DATA_SELECTED_KEYS = Object.keys(DATA_SELECTED);
|
||||||
|
|
||||||
// Perform a sequential search.
|
// Perform a sequential search.
|
||||||
for (
|
for (
|
||||||
let DATA_SELECTED_KEY_INDEX = 0;
|
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++
|
DATA_SELECTED_KEY_INDEX++
|
||||||
) {
|
) {
|
||||||
PARAMETER_TEST[`value`] =
|
PARAMETER_TEST[`value`] =
|
||||||
|
@ -113,8 +124,7 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
|
||||||
QUALIFIED =
|
QUALIFIED =
|
||||||
new RegExp(String(PARAMETER_TEST[`value`])).test(
|
new RegExp(String(PARAMETER_TEST[`value`])).test(
|
||||||
PARAMETER_TEST[`test value`],
|
PARAMETER_TEST[`test value`],
|
||||||
) ||
|
) || PARAMETER_TEST[`test value`].includes(PARAMETER_TEST[`value`]);
|
||||||
PARAMETER_TEST[`test value`].includes(PARAMETER_TEST[`value`]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (QUALIFIED) {
|
if (QUALIFIED) {
|
||||||
|
@ -127,7 +137,9 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
|
||||||
if (!QUALIFIED) {
|
if (!QUALIFIED) {
|
||||||
DATA_SELECTED = null;
|
DATA_SELECTED = null;
|
||||||
}
|
}
|
||||||
} else {return (null);}
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// Now return the data.
|
// Now return the data.
|
||||||
return DATA_SELECTED;
|
return DATA_SELECTED;
|
||||||
|
@ -168,6 +180,76 @@ export async function read(DATA_NAME, CLOUD = 0, PARAMETER_TEST = null) {
|
||||||
return DATA_RETURNED[`value`];
|
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.
|
/* Write the data on the selected prefname.
|
||||||
|
|
||||||
@param {string} PATH the preference name
|
@param {string} PATH the preference name
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue