UNPKG

deeplevelsearch

Version:

Search through object properties recursively at any level.

54 lines (44 loc) 1.32 kB
// 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;