Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

118
Vistas
How do I filter an object with an object using Array.filter similar to lodash?

I am trying to avoid importing lodash for a simple filter. I am trying to do something similar to this...

// Items
[
  { "title": "a", "name": "a", "location": "here"},
  { "title": "b", "name": "a", "location": "here"}, 
  { "title": "d", "location": "there"}, 
]
// Filter
{ "name" : "a", "location": "here" }

Should return the first two items. In lodash this is done by something similar to _.filter(Items, Filter). I would like to implement this without lodash or a bunch of code and getting Object.keys. Is there a simple way in modern Javascript to handle this?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Here's what I came up with, seems to work well

let foo = [
  { "title": "a", "name": "a", "location": "here"},
  { "title": "b", "name": "a", "location": "here"}, 
  { "title": "d", "location": "there"}, 
];

let bar = { "name" : "a", "location": "here" };

let result = foo.filter(obj =>
  Object.entries(bar).every(([k,v]) => obj[k]===v)
);

console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

I don't believe there's a "simple way in modern Javascript to handle this" but if you don't have a hard requirement on avoiding Object.keys you could write a helper function to do this:

const myItems = [
  { "title": "a", "name": "a", "location": "here"},
  { "title": "b", "name": "a", "location": "here"}, 
  { "title": "d", "location": "there"}, 
]

const myFilter = { "name" : "a", "location": "here" };

const filter = (items, filterBy) => 
  items.filter(item => 
    Object.keys(filterBy).every(key => item[key] === filterBy[key])
  )

alert(JSON.stringify(filter(myItems, myFilter)));

about 4 years ago · Juan Pablo Isaza Denunciar

0

You could get the entries of the filter in advance to prevent getting th entries for every filtering iteration.

const
    filter = (array, filter) => {
        const
            filterBy = entries => o => entries.every(([k, v]) => o[k] === v);

        return items.filter(filterBy(Object.entries(filters)));
    },
    items = [{ title: "a", name: "a", location: "here" }, { title: "b", name: "a", location: "here" }, { title: "d", location: "there"}],
    filters = { name: "a", location: "here" },
    result = filter(items, filters);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda