【发布时间】:2022-01-13 21:24:30
【问题描述】:
我正在尝试设置一个采用两个搜索条件(名称和/或标签)的应用程序。
我为按名称搜索设置了动态搜索。但我无法进一步过滤标签名称的搜索。如何设置 2 个值的动态搜索。在我的情况下,您应该可以通过 name && tag 或 name 或 tag 进行搜索。
const filteredResults = studentData.filter((student) => {
const name = student.firstName + " " + student.lastName;
return (
name.toLowerCase().includes(searchTerm.toLowerCase()) ||
student.tags.filter((tag) => {
return tag.toLowerCase().includes(tagTerm.toLowerCase());
})
);
});
这是 api 数据的一个条目如下所示:
{
city: "Fushë-Muhurr"
company: "Yadel"
email: "iorton0@imdb.com"
firstName: "Ingaberg"
grades: [ "78", "100", "92", … ]
id: "1"
lastName: "Orton"
pic: "https://storage.googleapis.com/hatchways-app.appspot.com/assessments/data/frontend/images/voluptasdictablanditiis.jpg"
skill: "Oracle"
tags: [ "Tag1", "Tag2" ]
}
如果有人想查看它,我将在此处链接我的 githubo 存储库(这是一个非常小的项目): https://github.com/EricPezzulo/HatchwaysFrontendAssessment
【问题讨论】:
-
student.tags.filter 将始终返回一个真实的数组,也许您应该在过滤器的末尾添加 .length 以便在条件内使用它?
-
需要全文匹配还是不需要?您可以利用正则表达式模式。
-
@cute_programmer 不应该在你输入时过滤(所以如果我输入“F”,所有带有“F”的条目都应该填充等等)
-
@FrancescoVattiato 所以你说添加
.length喜欢student.tags.filter((tag) => { return tag.toLowerCase().includes(tagTerm.toLowerCase()); }).length? -
如果我正确理解问题中的最后一句话:搜索逻辑有缺陷。如果第一次测试通过,您目前有一个专属的
||短路。 IE。姓名 || TAG - 将匹配 just NAME 或 just TAG,但您没有匹配 NAME and TAG 的代码。您需要两个搜索逻辑的条件。
标签: javascript arrays reactjs search