【问题标题】: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
【问题讨论】:
标签:
javascript
arrays
search
【解决方案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);