diff --git a/src/material/table/table-data-source.ts b/src/material/table/table-data-source.ts index 119968bab0ac..52f637b867f9 100644 --- a/src/material/table/table-data-source.ts +++ b/src/material/table/table-data-source.ts @@ -236,23 +236,15 @@ export class _MatTableDataSource< * @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(); - // 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 + for (let val of Object.values(data)) { + if (val.toLowerCase().includes(transformedFilter)) { + return true; + } + } + return false; }; constructor(initialData: T[] = []) {