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

153
Visualizações
Filter array of objects by given array

I have array of objects in which I need to filter by statuses

const data = [
{
     id:1,
     name:"data1",
     status: {
          open:1,
          closed:1,
          hold:0,
          block:1
     }
},
{
     id:2,
     name:"data2",
     status: {
          open:1,
          closed:0,
          hold:4,
          block:1
     }
},
{
     id:3,
     name:"data3",
     status: {
          open:0,
          closed:0,
          hold:4,
          block:0
    }
}
]

statuses are in array

const statuses = ['open','closed']

I would need to filter all data that contains status open and closed bigger than 0. So result would be

   const result = [
    {
       id:1,
       name:"data1",
       status: {
              open:1,
              closed:1,
              hold:0,
              block:1
        }
    }]

This is my attempt,

const result = data.filter(item => {
            return (
                statuses.forEach(val => {
                    if (item.status[val] > 0)
                        return item   
                })
            )
        })

I'm sure I'm missing something here and I would appreciate any kind of help. Thank you

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

You can acheive your goal by using every method instead of forEach, like this:

const data = [ { id:1, name:"data1", status: { open:1, closed:1, hold:0, block:1 } }, { id:2, name:"data2", status: { open:1, closed:0, hold:4, block:1 } }, { id:3, name:"data3", status: { open:0, closed:0, hold:4, block:0 } } ];
const statuses = ['open','closed'];

const result = data.filter( ({status}) => statuses.every(key => status[key] > 0) );

console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório

0

Assuming that open and close are always equal or bigger than 0:

const data=[{id:1,name:"data1",status:{open:1,closed:1,hold:0,block:1}},{id:2,name:"data2",status:{open:1,closed:0,hold:4,block:1}},{id:3,name:"data3",status:{open:0,closed:0,hold:4,block:0}}];

let result = data.filter(e => e.status.open && e.status.closed)

console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório

0

Try this approach:

const opened = data.filter((item) => item.status.open === 1);

you can add your own checking inside filter. it will return an array with found object.

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