Você pode usar o operador de coalescência nula (??) e fazer algo nesse modelo:
const produtos = [
{ nome: 'item1', categoria: 'categoria1', valor: 10, id: 1234 },
{ nome: 'item2', categoria: 'categoria1', valor: 15, id: 5678 },
{ nome: 'item3', categoria: 'categoria2', valor: 20, id: 9012 },
{ nome: 'item4', categoria: 'categoria2', valor: 20, id: 3456 },
{ nome: 'item5', categoria: 'categoria3', valor: 15, id: 7890 },
];
function pesquisar(valores) {
const resultado = produtos.filter((item) => {
const nome = valores.nome ?? item.nome;
const categoria = valores.categoria ?? item.categoria;
const valor = valores.valor ?? item.valor;
const id = valores.id ?? item.id;
if (nome === item.nome &&
categoria === item.categoria &&
valor === item.valor &&
id === item.id
) return item;
});
return resultado;
}
pesquisar({ categoria: 'categoria2', valor: 20 }); // retorna item3 e item4
pesquisar({ categoria: 'categoria1' }); // retorna item1 e item2
pesquisar({ valor: 15 }); // retorna item2 e item5
pesquisar({ nome: 'item6' }); // retorna um array vazio