我想根据输入过滤搜索结果。到目前为止,我只从输入的第一个单词开始过滤,我不知道如何根据(可能的)多个单词/输入进行过滤。如果我搜索例如:“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();
})
});
3条答案
按热度按时间pinkon5k1#
您可以使用
includes
字符串方法来过滤搜索。这将匹配所有单词,包括在任何位置输入的单词。
但是如果你只想匹配那些首字母与输入值匹配的单词,那么你可以使用RegExp。
举个例子
在这种情况下,如果您的搜索输入是's',它将返回“有趣的故事”和“严肃的故事”。因为它将匹配搜索结果中任何单词的第一个字母。
但是如果你只想匹配搜索结果中第一个单词的第一个字母,那么你可以使用下面的RegExp
在这种情况下,如果您的搜索输入是's',它只会返回“Serious stories”。
lyfkaqu12#
您可以尝试使用正则表达式来匹配由单词组成的搜索字符串,方法是使用捕获组来选择和排除句子中的特定组。
svmlkihl3#
如何使用**startsWith function**: