搜索字符串数组以找到匹配的单词之一

Posted

技术标签:

【中文标题】搜索字符串数组以找到匹配的单词之一【英文标题】:Searching through an array of strings to find one of the words matching 【发布时间】:2022-01-23 04:31:19 【问题描述】:

我试图让我的用户输入一个搜索词,然后返回数组中与他们输入的所有名称匹配的字符串。因此,如果他们在这里输入 clinton,它会找到所有的 clintons,但如果他们搜索 hillary clinton,省略 rodham 中间名,它会返回 hillary,但不会返回 bill 或 chelsea。

const array = ['hillary rodham clinton', 'bill clinton', 'chealsea clinton', 'louise penny', 'amanda litman']

const searchTerm1 = 'hillary clinton' // should return hillary rodham clinton
const searchTerm2 = 'clinton' // should return hillary rodham clinton, bill clinton, chelsea clinton
const searchTerm3 = 'hillary' // should return hillary rodham clinton

【问题讨论】:

【参考方案1】:

假设您的搜索词总是由一个空格分隔,您可以执行以下操作:

const array = ['hillary rodham clinton', 'bill clinton', 'chealsea clinton', 'louise penny', 'amanda litman']

const searchTerm1 = 'hillary clinton' // should return hillary rodham clinton
const searchTerm2 = 'clinton' // should return hillary rodham clinton, bill clinton, chelsea clinton
const searchTerm3 = 'hillary' // should return hillary rodham clinton

let find = (term) => array.filter(item => term.split(' ').every(r => item.split(' ').includes(r)))

console.log(find(searchTerm1))
console.log(find(searchTerm2))
console.log(find(searchTerm3))

【讨论】:

【参考方案2】:

您可以使用此功能进行搜索。

function search(searchTerm, array) 
        const words = searchTerm.split(" ");
        let tmpArray = array;
        for (let i = 0; i < words.length; i++) 
            tmpArray = tmpArray.filter(obj => obj.indexOf(words[i]) >= 0);
        
            
        return tmpArray;


const newArray1 = search(searchTerm1, array);
const newArray2 = search(searchTerm2, array);
const newArray3 = search(searchTerm3, array);

【讨论】:

以上是关于搜索字符串数组以找到匹配的单词之一的主要内容,如果未能解决你的问题,请参考以下文章

如何在整个消息中搜索一个单词,将该单词分解为一个数组,然后检查其他数组以查看它是不是匹配?

通过删除字母匹配到字典里最长单词--双指针or自动机预处理?

Leetcode——通过删除字母匹配到字典里最长单词(子序列)

使用 Linq 和 Regex 比较 2 个字符串数组以进行部分匹配

2022&2023华为OD机试 - 找单词(Python)

leetcode 每日一题 79. 单词搜索