简体   繁体   English

使用 indexOf 搜索 JSON object 返回 undefined

[英]searching JSON object with indexOf returns undefined

I have JSON objects of chat messages in messages.json, as seen below:我在messages.json中有聊天消息的JSON对象,如下所示:

[
  {
   "sender": "Bob",
   "text": "Hi, how are you?"
  },
  {
   "sender": "James",
   "text": "Good, you?"
  }
]

I want to search messages for the index of a term received from a text input.我想在消息中搜索从文本输入中接收到的术语的索引。 However when I run the following code, I receive "undefined" in the console.但是,当我运行以下代码时,我在控制台中收到“未定义”。

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

Why is it returning undefined?为什么它返回未定义?

indexOf returns 0 if it found at the first character, which evaluates to FALSE.如果在第一个字符处找到 indexOf,则返回 0,计算结果为 FALSE。 Try it with试试看

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

indexOf() returns 0 based index so you need to convert it to boolean to avoid false positives. indexOf()返回基于 0 的索引,因此您需要将其转换为boolean以避免误报。 Also event.target.value might be empty, or has a different case. event.target.value也可能为空,或者有不同的情况。

I recommend making sure both values are defined and converting both strings to same case toLowerCase() before comparison我建议确保两个值都已定义并将两个字符串转换为相同的大小写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);

Since message is array, indexOf won't work, you need to iterate to find single msg, use find() for that, to find multiple instances use filter()由于消息是数组,indexOf 将不起作用,您需要迭代查找单个 msg,为此使用 find(),查找多个实例使用 filter()

   const handleChange = (event) => {
          const result = message.find(i=>i.text.toLowerCase().indexOf(event.target.value.toLowerCase()));
          console.log(result);
        };

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM