Как отфильтровать массив по условию?

Нужно отфильтровать массив arr1:

const arr1 = [
{name: 'Вася', surname: 'Пупкин', age: 22},
{name: 'Петя', surname: 'Залупкин', age: 23},
{name: 'Ваня', surname: 'Быков', age: 22},
{name: 'Володя', surname: 'Пупкин', age: 21},
]

const obj = {name: 'Петя', surname: 'Пупкин', age: 21}

const arr2 = arr1.filter(item => {
                 //Здесь код
} 

console.log(arr2)

Чтобы результат был таков:

arr2 = [
{name: 'Вася', surname: 'Пупкин', age: 22},
{name: 'Петя', surname: 'Залупкин', age: 23},
{name: 'Володя', surname: 'Пупкин', age: 21}
]

На словах: у первого элемента совпадает фамилия - оставляем, у второго совпадает имя - оставляем, у третьего ничего не совпадает - убираем, у четвертого совпадает возраст - оставляем.


Ответы (2 шт):

Автор решения: entithat

const arr1 = [
  { name: 'Вася', surname: 'Пупкин', age: 22 },
  { name: 'Петя', surname: 'Залупкин', age: 23 },
  { name: 'Ваня', surname: 'Быков', age: 22 },
  { name: 'Володя', surname: 'Пупкин', age: 21 },
];
const obj = { name: 'Петя', surname: 'Пупкин', age: 21 };
const ent = Object.entries(obj);

console.log(arr1.filter(item => ent.some(e => e[1] === item[e[0]])));

→ Ссылка
Автор решения: Qwertiy

const arr1 = [
  { name: 'Вася',     surname: 'Пупкин',     age: 22 },
  { name: 'Петя',     surname: 'Залупкин',   age: 23 },
  { name: 'Ваня',     surname: 'Быков',      age: 22 },
  { name: 'Володя',   surname: 'Пупкин',     age: 21 },
]

const obj = {name: 'Петя', surname: 'Пупкин', age: 21}
const keys = Object.keys(obj)

const arr2 = arr1.filter(x => keys.some(k => x[k] === obj[k]))

console.log(arr2)
.as-console-wrapper.as-console-wrapper { max-height: 100vh }

→ Ссылка