Search code examples
angularangular2-templateangular2-formsangular2-directivesangular6

how to filter array with multiple properties in angular


I have created a pipe in my angular 5 project, which will takes the input from html and filter array and will return filtered array. But currently I am passing the property name("firstName") from HTML file. Now i want that, it should filter from properties "firstName" and "lastName" both. Please tell me what should i change to do the same ???

search-filter.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'searchFilter'
})
export class SearchFilter implements PipeTransform {
    transform(data: any, search?: string, propertyName?: string): any {
        if (search === undefined) {
            return data;
        } else {
            return data.filter(obj => obj[propertyName].toLowerCase().includes(search.toLowerCase()));
        }
    }
}

user.component.html

<div class="row" *ngFor="let data of datas| searchFilter: search: 'firstName'}">
   {{data.lastName}}, {{data.firstName}}
</div>

sample-data.ts

 datas: [
{ firstName: 'vipin', company: 'abc', lastName: 'sharma' },
{ firstName: 'kevin', company: 'abc2', lastName: 'xyz' },
{ firstName: 'Leos', company: 'abc3', lastName: 'abc' },
]

Solution

  • I got my answer and its working fine :

    import { Pipe, PipeTransform } from '@angular/core';
    
    @Pipe({
        name: 'searchFilter'
    })
    export class SearchFilter implements PipeTransform {
        transform(data: any, search?: string, propertyName?: string, propertyName2?: string): any {
            if (search === undefined) {
                return data;
            } else {
                let filteredData = data.filter(obj => obj[propertyName].toLowerCase().includes(search.toLowerCase()));
                if (propertyName2) {
                    filteredData = filteredData.concat(data.filter(obj => obj[propertyName2].toLowerCase().includes(search.toLowerCase())));
                }
                return filteredData;
            }
        }
    }