使用indexOf搜索JSON对象会返回未定义的结果



我在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);
};

最新更新