Javascript 使用indexOf搜索JSON对象返回未定义的

Javascript 使用indexOf搜索JSON对象返回未定义的,javascript,json,Javascript,Json,我在messages.JSON中有聊天消息的JSON对象,如下所示: [ { "sender": "Bob", "text": "Hi, how are you?" }, { "sender": "James", "text": "Good, you?" } ] 我想在邮件中搜索从文本输入接收到的

我在messages.JSON中有聊天消息的JSON对象,如下所示:

[
  {
   "sender": "Bob",
   "text": "Hi, how are you?"
  },
  {
   "sender": "James",
   "text": "Good, you?"
  }
]
我想在邮件中搜索从文本输入接收到的术语索引。但是,当我运行以下代码时,我在控制台中收到“undefined”

const handleChange = (event) => {
  const result = messages.filter((message) => {
    return message.text.indexOf(event.target.value);
  });
  console.log(result);
};

为什么返回undefined?

如果在第一个字符处找到indexOf,则返回0,计算结果为FALSE。试一下

return message.text.indexOf(event.target.value) > -1

如果在第一个字符处找到indexOf,则返回0,其计算结果为FALSE。试一下

return message.text.indexOf(event.target.value) > -1

由于消息是数组,indexOf将不起作用,您需要迭代以查找单个消息,使用find()进行查找,使用filter()查找多个实例


由于消息是数组,indexOf将不起作用,您需要迭代以查找单个消息,使用find()进行查找,使用filter()查找多个实例

indexOf()
返回基于0的索引,因此需要将其转换为
boolean
以避免误报。另外,
event.target.value
可能为空,或者大小写不同

我建议确保两个值都已定义,并在比较之前将两个字符串转换为相同的大小写
toLowerCase()

const消息=[{
“发件人”:“鲍勃”,
“文本”:“嗨,你好吗?”
},
{
“发件人”:“詹姆斯”,
“文本”:“很好,你呢?”
}
]
const result=messages.filter((message)=>{
返回message.text.toLowerCase().indexOf(“良好”)>=0;
});
控制台日志(结果)
indexOf()
返回基于0的索引,因此需要将其转换为
布尔值以避免误报。另外,
event.target.value
可能为空,或者大小写不同

我建议确保两个值都已定义,并在比较之前将两个字符串转换为相同的大小写
toLowerCase()

const消息=[{
“发件人”:“鲍勃”,
“文本”:“嗨,你好吗?”
},
{
“发件人”:“詹姆斯”,
“文本”:“很好,你呢?”
}
]
const result=messages.filter((message)=>{
返回message.text.toLowerCase().indexOf(“良好”)>=0;
});

控制台日志(结果)提示:
{}!=={}
提示:
{}!=={}
更重要的是,indexOf在未找到文本时返回
-1
,而
-1
的计算结果为
true
,因此过滤器包括未找到或未找到文本的消息,只要在0未找到文本,更重要的是,indexOf在未找到文本时返回
-1
,而
-1
的计算结果为
true
,因此,只要在0处未找到文本,筛选器就会包含未找到或已找到文本的消息