function customGetValues(object, path) {
path = path.split('.');
const last = path.pop();
return path.length ? path.reduce((acc, p) => {
return acc[p];
}, object)object[path].map(v => v[last]) : [object[last]];
}
function searchFor(needle, haystack, filter) {
return filter.some(f => customGetValues(haystack, f).some(v => v.includes(needle)));
}
const hay = [{
"id": "57db96f4acfaec3218383063",
"name": {
"first": "Nora",
"last": "Cooke"
},
"company": "MITROC",
"email": "[email protected]",
"friends": [{
"id": 0,
"name": "West Duke"
}, {
"id": 1,
"name": "Williams Kelley"
}, {
"id": 2,
"name": "Amelia Kirk"
}]
}, {
"id": "57db96f4d5cae409054d3a5b",
"name": {
"first": "Dickson",
"last": "Moses"
},
"company": "VISUALIX",
"email": "[email protected]",
"friends": [{
"id": 0,
"name": "Patty Carr"
}, {
"id": 1,
"name": "Bowers Wilkerson"
}, {
"id": 2,
"name": "Fox Kidd"
}]
}, {
"id": "57db96f42215bea719d83036",
"name": {
"first": "Kerr",
"last": "Gray"
},
"company": "TUBESYS",
"email": "[email protected]",
"friends": [{
"id": 0,
"name": "Rose Pierce"
}, {
"id": 1,
"name": "Matthews Moore"
}, {
"id": 2,
"name": "Brenda Ayala"
}]
}, {
"id": "57db96f435d0f064afc90768",
"name": {
"first": "Elsie",
"last": "Dejesus"
},
"company": "KLUGGER",
"email": "[email protected]",
"friends": [{
"id": 0,
"name": "Gina Cruz"
}, {
"id": 1,
"name": "Nieves Carrillo"
}, {
"id": 2,
"name": "Chandler Sanford"
}]
}, {
"id": "57db96f4597631fffff36b6b",
"name": {
"first": "Chan",
"last": "Mcdaniel"
},
"company": "AQUACINE",
"email": "[email protected]",
"friends": [{
"id": 0,
"name": "Hodge Sweeney"
}, {
"id": 1,
"name": "Sweet Burnett"
}, {
"id": 2,
"name": "Lynn Hunter"
}]
}];
const filter = ['company', 'friends.name'];
console.log('Sweet', hay.map(element => searchFor('Sweet', element, filter)));
console.log('Rose', hay.map(element => searchFor('Rose', element, filter)));