deeplevelsearch
Version:
Search through object properties recursively at any level.
54 lines (44 loc) • 1.32 kB
JavaScript
// function (keyword,artifacts)
// flatten artifacts
// filter flattened data
// revert to array
const flatten = require("./flatten");
function deepSearch(keyword, artifacts) {
let filteredKeyValue = {};
let expandedResult = [];
const flatObject = flatten(artifacts);
let flatKeys = Object.keys(flatObject);
let keys = flatKeys.map((key) => key.split(".").pop());
keys = [...new Set(keys)];
let filteredResults = Object.keys(flatObject).filter((k) => {
if (!flatObject[k]) {
return false;
}
if (flatObject[k].toString().includes(keyword)) {
return true;
}
});
filteredResults.map((result) => {
splitFlattenIndex = result.split(".");
const length = splitFlattenIndex.length;
for (let i = 0; i < length; i++) {
if (i % 2 === 0) {
for (key of keys) {
let string = "";
for (let j = i; j > -1; j--) {
string = `${splitFlattenIndex[j]}.${string}`;
}
expandedResult.push(`${string}${key}`);
}
}
}
});
// Remove duplicate
expandedResult = [...new Set(expandedResult)];
// Get key value pair
expandedResult = expandedResult.map(
(f) => (filteredKeyValue[f] = flatObject[f])
);
return flatten.unflatten(filteredKeyValue);
}
exports.deepSearch = deepSearch;