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

152
Vistas
Filtrar matriz de matriz dentro de un objeto complejo y devolver ese objeto

He intentado escribir tuberías así:

Esto es lo que necesito para lograr

el filtro permitirá ocultar cualquier objeto ( items/ItemModel[] ) que no incluya los colores seleccionados ( res/FilterMenuDataModel )

Los colores seleccionados significan la matriz colorIds .

 transform(items: ItemModel[]): Observable<ItemModel[]> { return this.menuElementsDataService.filterMenuFinalDataChanged$.pipe( map((res) => { if (!res) { return items; } return filter(items, (i) => 'need your help here'; }) ); }

artículo.modelo.ts

 export interface ItemModel { itemId?: number; itemName?: string; colorIds?: number[]; // one array is this }

filtro-menú-datos-modelo.ts

 export interface FilterMenuDataModel { colorIds?: number[]; // the other array is this }

Nota: el objeto res tiene propiedades FilterMenuDataModel .

He intentado muchas cosas/muchas horas sin suerte todavía. ¿Sabes como hacer esto? He usado Lodash aquí. Pero la forma de Javascript también está bien, por lo tanto, puedo convertirlo a Lodash más tarde.

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

0

Creo que entiendo que el objetivo es encontrar elementos que no tengan ID de color en común con los elementos seleccionados por un filterMenu. Lodash ofrece la intersección () , por lo que el predicado del filtro puede ser una prueba para una intersección vacía, de la siguiente manera...

 const items = [ { itemId: 0, itemName: 'zero', colorIds: [32, 33, 34] }, { itemId: 1, itemName: 'one', colorIds: [33, 34, 35] }, { itemId: 2, itemName: 'two', colorIds: [34, 35, 36] }, ]; // only item one above does not include colors 32 and 36 const filterMenuData = { colorIds: [32, 36] }; const hideTheseItems = items.filter(item => { return _.intersection(item.colorIds, filterMenuData.colorIds).length === 0; }); console.log(hideTheseItems);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

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