我在messages.JSON中有聊天消息的JSON对象,如下所示:
[
{
"sender": "Bob",
"text": "Hi, how are you?"
},
{
"sender": "James",
"text": "Good, you?"
}
]
我想在邮件中搜索从文本输入中接收的术语的索引。然而,当我运行下面的代码时;未定义的";在控制台中。
const handleChange = (event) => {
const result = messages.filter((message) => {
return message.text.indexOf(event.target.value);
});
console.log(result);
};
为什么它返回未定义?
indexOf如果在第一个字符处找到,则返回0,计算结果为FALSE。试试
return message.text.indexOf(event.target.value) > -1
indexOf()
返回基于0的索引,因此需要将其转换为boolean
以避免误报。此外,event.target.value
可能是空的,或者有不同的情况。
我建议确保定义了两个值,并在比较之前将两个字符串转换为相同大小写的toLowerCase()
const messages = [{
"sender": "Bob",
"text": "Hi, how are you?"
},
{
"sender": "James",
"text": "Good, you?"
}
]
const result = messages.filter((message) => {
return message.text.toLowerCase().indexOf("good") >= 0;
});
console.log(result);
由于消息是数组,indexOf不起作用,您需要迭代查找单个消息,为此使用find((,查找多个实例使用filter((
const handleChange = (event) => {
const result = message.find(i=>i.text.toLowerCase().indexOf(event.target.value.toLowerCase()));
console.log(result);
};