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

176
Vistas
Filtre una lista de objetos en función de una propiedad de lista comparada con una lista

Tengo una lista de objetos en el siguiente formato.

 let information = [ { data: { list: [ 'item1', 'item4', 'item5'], } }, { data: { list: [ 'item100', 'item200', 'item300'], } }, { data: { list: [ 'item1', 'item2', 'item3'], } }, { data: { list: [ 'item70', 'item71', 'item300'], } } ]

Tengo una lista dinámica proveniente de otra selección que podría tener este aspecto.

 const dynamicList = ['item1', 'item71'];

Deseo filtrar objetos de la información donde hay al menos 1 coincidencia en comparación con la lista dinámica.

Entonces, en el ejemplo anterior, después de filtrar, debería quedarme con solo 3 elementos.
Solo el segundo elemento no tiene ni item1 ni el elemento item71 , por lo que los 3 restantes son una coincidencia.

Intenté lo siguiente para filtrar.

Pero el resultado es 4, por lo que no se filtró nada. El segundo dato no tiene elemento 1 en su lista.
¿Por qué no se ha filtrado? Por favor aconséjame. Gracias.

 console.log(information.length); // 4 information = information .filter(info => info.data.list !== null) .filter(info => info.data.list .filter(item => dynamicList.includes(item))); console.log(information.length); // still 4, should be 3

PD: el código anterior se puede pegar en la consola de un navegador para probarlo.

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

0

Puede filtrar los elementos cuya lista contiene al menos un elemento de dynamicList usando .some .some() :

 let information = [ { data: { list: [ 'item1', 'item4', 'item5'], } }, { data: { list: [ 'item100', 'item200', 'item300'], } }, { data: { list: [ 'item1', 'item2', 'item3'], } }, { data: { list: [ 'item70', 'item71', 'item300'], } } ]; const dynamicList = ['item1', 'item71']; let filteredList = information.filter(info => info.data.list.some(el => dynamicList.includes(el))); console.log(filteredList);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Esta puede ser una posible solución para lograr el objetivo deseado:

Fragmento de código

 const filterUsing = (dlist, iarr) => ( iarr.filter( ({data : { list }}) => list && list.some(x => dlist.some(y => x === y)) ) ); // instead of dlist.some(y => x === y), may also use dlist.includes(x) const information = [{ data: { list: ['item1', 'item4', 'item5'], } }, { data: { list: ['item100', 'item200', 'item300'], } }, { data: { list: ['item1', 'item2', 'item3'], } }, { data: { list: ['item70', 'item71', 'item300'], } } ]; const dynamicList = ['item1', 'item71']; console.log('filtered-array:', filterUsing(dynamicList, information)); console.log('length: ', filterUsing(dynamicList, information).length);

Explicación

  • Un método filterUsing toma dos parámetros: dlist (Lista dinámica) e iarr (matriz de información)
  • Aplicar .filter() en iarr
  • Desestructurar el elemento iarr para acceder a data.list
  • Compruebe si hay some elemento en la list que esté presente en dlist .
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