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