javascript - 如何改进我的backbone.js搜索功能?

标签 javascript regex function search backbone.js

我有一个搜索功能,作为我正在编写的主干应用程序的一部分。我需要一些帮助来扩展它。理想情况下,我希望它能够

  1. 在我的模型中搜索多个类别,并且
  2. 不必如此精确匹配(也许使用正则表达式?)

这是我的代码:

search: function(e) {
           var search = this.$('.search').val();  //pulling in from the search bar
           results = namesCollection.filter(function(item) { return item.get('First_Name') == (search);}); //returns a filtered collection that matches (exactly) the search results
           filteredCollection.reset(results); //this just resets the current view
}

该代码可以工作,但现在它只返回与 First_Name 完全匹配的结果。有什么方法可以让它同时匹配 First_Name 和 Last_Name 吗?另外,我正在尝试找到一种方法,让它返回不完整的搜索。因此,在搜索栏中输入“Joh”将返回 John 和 Johanna 的 First_Name。

这是我的数据的样子(当然是简化的):

var data = [
            {
             "First_Name": "John",
             "Last_Name": Smith
            },
            {
             "First_Name": "Johanna",
             "Last_Name": "Greene"
            }
          ];

namesCollection 是指我的数据集中所有名称的 Backbone 集合。谢谢!

最佳答案

至于搜索名字和姓氏,为什么不对过滤结果运行另一个过滤器呢?您可以按空格分割搜索。

results = namesCollection.filter(function(item) { return item.get('First_Name') == (search.split(' ')[0]);});
if(search.split(' ').length > 1){
    results = namesCollection.filter(function(item) { return item.get('Last_Name') == (search.split(' ')[1]);});
}

要查找可能与拼写错误的单词一起使用的相似字符串,您可能需要类似 Levenshtein 函数的东西,它允许您计算字符串之间的相似性。然后,您可以根据自己的阈值确定是否将其视为匹配。 Here is a js library for it

如果您想要进行部分匹配,并假设它们拼写正确,您可以首先搜索完全匹配,如果找到,则使用它(假设第一个名称,这意味着拆分后只有一个元素)。如果未找到完全匹配,则尝试使用 indexOf() 进行部分匹配。如果您在名字上获得匹配,并且还有姓氏(意味着拆分中有多个元素),则尝试与姓氏进行精确匹配。如果姓氏匹配失败,则进行部分匹配搜索。

关于javascript - 如何改进我的backbone.js搜索功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24847468/

相关文章:

javascript - HTML 页面中 javascript 文件的加载顺序

javascript - 在 meteor 中单击按钮时显示动态卡的隐藏部分

python - 如果是空格,如何在不删除分隔符的情况下进行拆分

正则表达式:非捕获组

R函数删除列中的前4个字符?

javascript - 粒子 slider Logo 不会在 Safari 中调整大小

javascript - JS 正则表达式崩溃

arrays - Swift 乘法数组索引

JavaScript 函数运行了两次?

javascript - iPad 底部 :0px issue