-1

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"]
3

3 Answers 3

6

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))
})
Sign up to request clarification or add additional context in comments.

Comments

0

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));

Comments

0
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);
    });
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.