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

96
Visualizações
Array filter returning entire array

I'm trying to filter an array with nested objects like this:

const items = [
    {
        "id": 1,
        "name": "test1",
        "subitems": [
            {
                "id": 2,
                "name": "test2",
                "subsubitems": [
                    {
                        "id": 3,
                        "name": "test3",
                    },
                    {
                        "id": 4,
                        "name": "test4",
                    }
                ]
            }
        ]
    },
    {
        "id": 10,
        "name": "test10",
        "subitems": [
            {
                "id": 20,
                "name": "test20",
                "subsubitems": [
                    {
                        "id": 30,
                        "name": "test30",
                    }
                ]
            }
        ]
    }
]

const filteredResults = items.filter((item) =>
    item.subitems.filter((subitem) =>
        subitem.subsubitems.filter((subsubitem) =>
            subsubitem.name.includes('test3')
        )
    )
)

console.log(filteredResults)

But it's not filtering correctly, the original array is being returned. Right now I'm just attempting to filter at the subsubitems level. Ultimately I want to return an array with any matches to name at any level.

So test2 would return an array like this:

[
    {
        "id": 1,
        "name": "test1",
        "subitems": [
            {
                "id": 2,
                "name": "test2",
                "subsubitems": [
                    {
                        "id": 3,
                        "name": "test3",
                    },
                    {
                        "id": 4,
                        "name": "test4",
                    }
                ]
            }
        ]
    }
]

And test3 would return an array like this:

[
    {
        "id": 1,
        "name": "test1",
        "subitems": [
            {
                "id": 2,
                "name": "test2",
                "subsubitems": [
                    {
                        "id": 3,
                        "name": "test3",
                    }
                ]
            }
        ]
    }
]

And test would return everything.

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

0

Try This:

const items = [
  {
    id: 1,
    name: "test1",
    subitems: [
      {
        id: 2,
        name: "test2",
        subsubitems: [
          {
            id: 3,
            name: "test3",
          },
          {
            id: 4,
            name: "test4",
          },
        ],
      },
    ],
  },
  {
    id: 10,
    name: "test10",
    subitems: [
      {
        id: 20,
        name: "test20",
        subsubitems: [
          {
            id: 30,
            name: "test30",
          },
        ],
      },
    ],
  },
];

const filterItems = (items, filter) => {
  const result = [];
  items.forEach((item) => {
    if (item.name === filter) {
      result.push(item);
    }
    item.subitems.forEach((subitem) => {
      if (subitem.name === filter) {
        result.push(item);
      }
      subitem.subsubitems.forEach((subsubitem) => {
        if (subsubitem.name === filter) {
          result.push(item);
        }
      });
    });
  });

  console.log("filtered", result);
};

filterItems(items, "test10");

Result is :

filtered [ { id: 10, name: 'test10', subitems: [ [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