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.
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>