diff --git a/src/material/table/table-data-source.ts b/src/material/table/table-data-source.ts index 119968bab0ac..cb365eff0850 100644 --- a/src/material/table/table-data-source.ts +++ b/src/material/table/table-data-source.ts @@ -235,25 +235,14 @@ export class _MatTableDataSource< * @param filter Filter string that has been set on the data source. * @returns Whether the filter matches against the data */ - filterPredicate: (data: T, filter: string) => boolean = (data: T, filter: string): boolean => { - // Transform the data into a lowercase string of all property values. - const dataStr = Object.keys(data) - .reduce((currentTerm: string, key: string) => { - // Use an obscure Unicode character to delimit the words in the concatenated string. - // This avoids matches where the values of two columns combined will match the user's query - // (e.g. `Flute` and `Stop` will match `Test`). The character is intended to be something - // that has a very low chance of being typed in by somebody in a text field. This one in - // particular is "White up-pointing triangle with dot" from - // https://en.wikipedia.org/wiki/List_of_Unicode_characters - return currentTerm + (data as {[key: string]: any})[key] + '◬'; - }, '') - .toLowerCase(); - + filterPredicate: ((data: T, filter: string) => boolean) = (data: T, filter: string): boolean => { // Transform the filter by converting it to lowercase and removing whitespace. const transformedFilter = filter.trim().toLowerCase(); - - return dataStr.indexOf(transformedFilter) != -1; - }; + // Loops over the values in the array and returns true if any of them match the filter string + return Object.keys(data).some( + (key)=>(data as {[key: string]: any})[key].toLowerCase().includes(transformedFilter) + ); + } constructor(initialData: T[] = []) { super();