Is it possible to have an array filter another array from matching each character?
I have a set of logs and a filter that look like this:
logs = [{id:1, log: "log1"}], {id:2, log: "log2"}, {id:3, log: "fail"}
filter = ["log"]
it should return
[{id:1, log: "log1"}, {id:2, log: "log2"}]
If my filter were to be
filter = ["1", "fai"]
the output would be
[{id:1, log: "log1"}, {id:3, log: "fail"]
CodePudding user response:
You can use the function Array.prototype.filter
along with the function Array.prototype.some
in order to filter out the objects that don't match the filter.
const match = (filter, key, array) => array.filter(o => filter.some(c => o[key].includes(c))),
array = [{id:1, log: "log1"}, {id:2, log: "log2"}, {id:3, log: "fail"}];
console.log(match(["log"], "log", array));
console.log(match(["1", "fai"], "log", array));
CodePudding user response:
You can do something like the following:
const logs = [{id:1, log: "log1"}, {id:2, log: "log2"}, {id:3, log: "fail"}]
const searches = ["1", "fai"]
const matchingLogs = logs.filter(l => {
return searches.some(term => l.log.includes(term))
})
CodePudding user response:
let logs = [{id:1, log: "log1"}, {id:2, log: "log2"}, {id:3, log: "fail"}];
let filter = ["1", "fai"];
/*
* filter the array using the filter function.
* Find any given string in the array of objects.
* If you have a match, it will be added to the
* array that will be returned
*/
let matches = logs.filter(function(object) {
return !!filter.find(function(elem) {
return -1 !== object.log.indexOf(elem);
});
});