У меня есть данные о состоянии, которые выглядят так:
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
)
);
});
Любая помощь будет отличной