在由两个数据库字段组成的 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'))
我在 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'))