Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

130
Visualizações
Refactoring request: Trying to find more optimal way to filter an array of objects applying several filters

Trying to filter an array of objects by the properties of another array of objects:

Data that I have

const filters = [
    {
        "id": "breed",
        "value": "bulldog"
    },
    {
        "id": "owner",
        "value": "Kevin"
    }
]

const dogs = [
    {
        "name": "Zephyr",
        "breed": "bulldog",
      "owner":"Kevin"
    },
    {
        "name": "Dude",
        "breed": "labradoodle",
      "owner":"Lance"
    },
        {
        "name": "Mark",
        "breed": "yorkie",
      "owner":"Rob"
    },
      {
        "name": "Cheddar",
        "breed": "bulldog",
      "owner":"Kevin"
    },
]

Output should be look like that:

[ { name: "Cheddar", breed: "bulldog", owner: "Kevin", }, { name: "Zephyr", breed: "bulldog", owner: "Kevin", }, ];

But instead I am getting just:

[
    {
        "name": "Zephyr",
        "breed": "bulldog",
        "owner": "Kevin"
    }
]

This is what I am doing:

dogs.reduce((acc, obj) => {
  filters.forEach((element) => {
    if (dogs.find((i) => i[element.id].includes(element.value))) {
      if (!acc.some((e) => e[element.id].includes(element.value))) {
        acc.push({ ...obj });
      }
    }
  });
  return acc;
}, []);
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Using Array#filter and Array#every, get the list of dogs meeting the filters

const 
  filters = [ { "id": "breed", "value": "bulldog" }, { "id": "owner", "value": "Kevin" } ],
  dogs = [ { "name": "Zephyr", "breed": "bulldog", "owner":"Kevin" }, { "name": "Dude", "breed": "labradoodle", "owner":"Lance" }, { "name": "Mark", "breed": "yorkie", "owner":"Rob" }, { "name": "Cheddar", "breed": "bulldog", "owner":"Kevin" } ];
  
const filteredDogs = dogs.filter(dog => 
  filters.every(({ id, value }) => dog[id] === value)
);

console.log(filteredDogs);

about 4 years ago · Juan Pablo Isaza Relatório

0

Here is your ans:

const result = dogs.filter(dog => {
  return filters.every(filter => dog[filter.id] == filter.value)
})

Code snippet

const filters = [
    {
        "id": "breed",
        "value": "bulldog"
    },
    {
        "id": "owner",
        "value": "Kevin"
    }
]

const dogs = [
    {
        "name": "Zephyr",
        "breed": "bulldog",
      "owner":"Kevin"
    },
    {
        "name": "Dude",
        "breed": "labradoodle",
      "owner":"Lance"
    },
        {
        "name": "Mark",
        "breed": "yorkie",
      "owner":"Rob"
    },
      {
        "name": "Cheddar",
        "breed": "bulldog",
      "owner":"Kevin"
    },
];

const result = dogs.filter((dog)=> {
  return filters.every((filter)=> dog[filter.id] == filter.value)
})

console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda