Javascript如何根据多个输入词过滤搜索结果?

xienkqul  于 2023-04-04  发布在  Java
关注(0)|答案(3)|浏览(170)

我想根据输入过滤搜索结果。到目前为止,我只从输入的第一个单词开始过滤,我不知道如何根据(可能的)多个单词/输入进行过滤。如果我搜索例如:“funny stories”和其中一本书的名字是stories,我想返回它作为匹配,就像输入是“funny”一样。用我现在的代码,如果我开始输入funny,我只会返回说的书。

const filteredSuggestions = suggestions
    .filter(({name}) => {
            const match = name.substr(0, searchInput.length);
            return match && match.toLowerCase() === searchInput.toLowerCase();
});

我试过了(不起作用):

const filteredSuggestions = suggestions
    .filter(({name}) => {
         const nameArr = name.split(" ");
        nameArr.map(name => {
            const match = name.substr(0, searchInput.length);
            return match && match.toLowerCase() === searchInput.toLowerCase();
        })
});
pinkon5k

pinkon5k1#

您可以使用includes字符串方法来过滤搜索。

const filteredSuggestions = suggestions
    .filter(({name}) => {
            return name?.toLowerCase().includes(searchInput.toLowerCase())
});

这将匹配所有单词,包括在任何位置输入的单词。
但是如果你只想匹配那些首字母与输入值匹配的单词,那么你可以使用RegExp。
举个例子

const regex = new RegExp(`\\b${userInput}`, "i");
const filteredSuggestions = suggestions
    .filter(({name}) => {
            return regex.test(result)
});

在这种情况下,如果您的搜索输入是's',它将返回“有趣的故事”和“严肃的故事”。因为它将匹配搜索结果中任何单词的第一个字母。
但是如果你只想匹配搜索结果中第一个单词的第一个字母,那么你可以使用下面的RegExp

const regex = new RegExp(`^${userInput}`, "i");

在这种情况下,如果您的搜索输入是's',它只会返回“Serious stories”。

lyfkaqu1

lyfkaqu12#

您可以尝试使用正则表达式来匹配由单词组成的搜索字符串,方法是使用捕获组来选择和排除句子中的特定组。

svmlkihl

svmlkihl3#

如何使用**startsWith function**:

const books = [
  'funny stories',
  'tales',
  'science',
  'medicine'
],
display = document.getElementById('display'),
input = document.getElementById('input'),
results = document.getElementById('results');
  
display.innerHTML = JSON.stringify(books);

function onSearch(event)
{
  const value = event.target.value.trim();

  if( value )
  {
    const filtered = books.filter(book => book.startsWith(value));
    results.innerHTML = filtered.length ? JSON.stringify(filtered) : '';
  }
  else
  {
    results.innerHTML = "";
  }
}
<div id="display">

</div>

<br>

<input id="input" onkeyup="onSearch(event)" type="text">

<br> <br>

<div id="results">

</div>

相关问题