【发布时间】:2020-08-17 11:56:25
【问题描述】:
我的状态数据如下所示:
state = {
search: “”
tagValue: “”
data: [
{
id: 1,
fName: "Henry",
lName: "Jones"
email: “lol@hotmail.com”,
gpa: “3.6”
tag: [
"hello", "bye"
]
},
{
fName: "Jeffrey",
lName: "Johnston”,
email: “hehdbejeu@gmail.com”,
gpa: “2.6”,
tag: [
"hello", "bye"
]
},
{
fName: "Henry",
lName: "Jones"
gpa: “1.9”
tag: [
]
}
]
}
我已经弄清楚了如何根据用户输入过滤数据数组:
let studentListFilter = this.state.data.filter((student) => {
return (
student.firstName
.toLowerCase()
.indexOf(this.state.search.toLowerCase()) !== -1 ||
student.lastName
.toLowerCase()
.indexOf(this.state.search.toLowerCase()) !== -1
}
然后在我的渲染方法中返回 studentListFilter。 search 是根据用户输入更新的状态值。但是我无法弄清楚如何将位于数组中的值(在这种情况下特别是标记)与用户输入进行比较。
我试过这样做无济于事:
let studentListFilter = this.state.data.filter((student) => {
return (
student.fName
.toLowerCase()
.indexOf(this.state.search.toLowerCase()) !== -1 ||
student.lName
.toLowerCase()
.indexOf(this.state.search.toLowerCase()) !== -1 ||
student.tag.map(
(individualTag) =>
individualTag
.toLowerCase()
.indexOf(this.state.tagValue.toLowerCase()) !== -1
)
);
});
任何帮助都会很棒
【问题讨论】:
-
请在codesandbox.io 中提供工作示例,重现您的问题以便更好地理解..
-
您只是想检查
tagValue是否包含在至少一个student.tag数组中? -
我想看看它是否至少类似于 student.tag 数组中的元素之一
-
你能用你过滤的数据和你过滤的对象更新你的问题吗?下面的答案是正确的,但我们需要查看过滤对象的结构。
-
我已经更新了帖子中状态数据的结构。数据数组中的每个元素都应该提供有关研究的信息。我几乎通过 studentListFilter 映射数组中的数据对象,并显示 firstnamelastname、gpa、email 的各个 div。用户可以将字符串输入到每个学生的标签数组中。并且有两个文本输入,第一个允许按名字或姓氏过滤数据数组,第二个允许用户根据每个学生的标签进行过滤。