Quiero generar una tubería de filtro en Angular que funcione para filtrar el objeto de matriz Car, Brand y Color por su parámetro de tubería correspondiente a su propiedad "carName", "brandName", etc.
Por ejemplo, esta tubería filtrará los colores por su nombre correspondiente al valor del parámetro de tubería de filtro.
Pero quiero hacer que esta tubería filtre en todos los tipos de objetos con su propiedad de nombre (del objeto) que creé con los medios.
Para hacer eso, Todos los objetos deben tener el mismo nombre de propiedad "Nombre". Pero My Objects tiene diferentes propiedades de nombre como;
carName:string (Car) name:string (Brand) name:string (Color)Creé una tubería que funciona correctamente en un objeto que solo tiene propiedades de "nombre", pero no puedo hacer que esta tubería funcione también en el objeto Car;
@Pipe({ name: 'filter', }) export class FilterPipe implements PipeTransform { transform(entityList: any[], filter: string): any[] { filteredList: typeof entityList; if (filter) { filter = filter.toLocaleLowerCase(); return entityList.filter((c) => c.name.toLocaleLowerCase().includes(filter) ); } return entityList; } }¿Cómo puedo crear una tubería genérica para filtrar objetos con su propiedad de nombre (del objeto) solo con las propiedades del objeto que incluyen la expresión "nombre"?
No conozco los detalles, como otras propiedades de sus objetos y si están todos agrupados en la misma matriz o si realmente tiene matrices de objetos del mismo tipo, o incluso cómo y dónde usa la tubería, así que esto es solo un ejemplo con algunas suposiciones y datos de maqueta: https://stackblitz.com/edit/base-angular-12-app-qqw1fq
Tu pipa podría ser:
transform(entityList: any[], filter: string): any[] { let filteredList = entityList; if (filter) { filteredList = []; filter = filter.toLowerCase(); entityList.forEach((c) => { Object.keys(c).forEach((key, i) => { if (key.toLowerCase().includes('name')) { if (c[key].toLowerCase().includes(filter)) { filteredList.push(c); } } }); }); } return filteredList; }