Вы можете создать собственный метод, который получает и обрабатывает объекты с парами (key, regular expression)
и внутри итератора Array.filter () над Object.entries () , чтобы проверить наличиенекоторые совпадения.
let input = [
{id: 'a', name: 'Alan', age: 10},
{id: 'ab', name: 'alanis', age: 15},
{id: 'b', name: 'Alex', age: 13}
];
const filterWithSome = (arr, obj) =>
{
return arr.filter(o =>
{
return Object.entries(obj).some(([k, v]) => o[k].match(v));
});
}
console.log(filterWithSome(input, {id: /^a/, name: /^al/}));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Если вместо этого вы хотите сопоставить каждый (key, regular expression)
объекта, переданного в качестве аргумента, вы можете заменить Array.some () by Array.every () :
let input = [
{id: 'a', name: 'Alan', age: 10},
{id: 'ab', name: 'alanis', age: 15},
{id: 'b', name: 'Alex', age: 13}
];
const filterWithEvery = (arr, obj) =>
{
return arr.filter(o =>
{
return Object.entries(obj).every(([k, v]) => o[k].match(v));
});
}
console.log(filterWithEvery(input, {id: /^ab/, name: /^al/}));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}