Javascript 使用indexOf搜索JSON对象返回未定义的
我在messages.JSON中有聊天消息的JSON对象,如下所示:Javascript 使用indexOf搜索JSON对象返回未定义的,javascript,json,Javascript,Json,我在messages.JSON中有聊天消息的JSON对象,如下所示: [ { "sender": "Bob", "text": "Hi, how are you?" }, { "sender": "James", "text": "Good, you?" } ] 我想在邮件中搜索从文本输入接收到的
[
{
"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处未找到文本,筛选器就会包含未找到或已找到文本的消息