Home > Enterprise >  Filter an array with another array with matching characters in javascript
Filter an array with another array with matching characters in javascript

Time:06-28

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);
    });
});
  • Related