在由两个数据库字段组成的 table 列中查找值

Look for value in a table column that is made up of two database fields

我在 Angular 中有一个按以下方式组成的 table 列:

        <tr *ngFor="let activity of activitiesTable.data">
              <td data-cy="employee-cell">
                   {{ activity.employee.lastName }} {{ activity.employee.firstName }}
              </td>

我的研究是这样实现的:

export function activityEmployeesFilterFn(
  entities: ActivityEmployee[],
  { query }: { query: string }
): ActivityEmployee[] {
  return query
    ? entities.filter(
        (e) =>
          -1 < e.lastName.toLowerCase().indexOf(query?.toLowerCase()) ||
          -1 < e.firstName.toLowerCase().indexOf(query?.toLowerCase())
      )
    : entities;
}

遗憾的是,此搜索只能按名字和姓氏进行。如果我尝试写“John Wessley”,它不会找到我的任何名字,因为他正在寻找 John 或 Wessely。 我该如何解决?

您可以颠倒您的比较逻辑,这样您就可以搜索用名字或姓氏键入的内容。

-1 < query?.toLowerCase().indexOf(e.lastName.toLowerCase()) ||
-1 < query?.toLowerCase().indexOf(e.firstName.toLowerCase())

根据您问题中可用的少量信息。

如果您不是在寻找完全匹配,您可以连接姓名和姓氏,然后检查您编写的字符串是否与其中任何一个匹配。

var employees = [{firstName : 'Jhon', lastName : 'Wick'},
{firstName : 'Miranda', lastName : 'Keyes'},
{firstName : 'Jhon', lastName : 'Cena'},
{firstName : 'Jhon', lastName : '117'},
{firstName : 'Robert', lastName : 'Deniro'},
{firstName : 'Wathever', lastName : 'is My Name'}]

function activityEmployeesFilterFn(
  entities,
  query
) {
  return query
    ? entities.filter(e => 
      `${e.firstName.toLowerCase()} ${e.lastName.toLowerCase()}`.includes(query.toLowerCase()))
    : entities;
}

console.log(activityEmployeesFilterFn(employees, 'Jhon'))
console.log(activityEmployeesFilterFn(employees, 'Jhon Cena'))
console.log(activityEmployeesFilterFn(employees, 'Jh'))