Jquery逻辑用于按字匹配的数量对选择选项进行排序

我想要类似于Mysql的数据排序,但是在jquery中。 我有一个输入和一个选择标签,像这样 –

在此处输入图像描述

我希望根据输入文本的值对选择选项进行过滤和排序。

  • 要对输入文本应用的过滤 OR逻辑以及要保留的包含至少一个单词的所有选项
  • 排序/分组然后按匹配数对剩余选项进行排序,以便包含输入中所有单词的选项显示在顶部,然后是包含少一个单词的选项,依此类推。 以下只是一个例子,可能不准确 –

在此处输入图像描述

我完成了过滤部分的逻辑。 现在是排序部分,我不知道该怎么做。

举个例子,说输入文字贴了5个字的字符串。 我不知道jQuery中是否有类似于Mysql的顺序,可以返回我的排序选项。 所以,我的逻辑是这样的(伪代码) –

var numberOfWords; sortedOptions = new Array(); for(cnt=numberOfWords; cnt>0; cnt --) { find options containing exactly those many words append them to array sortedOptions } 

现在考虑numberOfWords = 5和cnt = 3的情况。 有3个单词的许多可能组合,我需要检查以准备3个单词匹配的选项。 这很好,但是当字数增加时,代码的时间复杂度如何? 有更好的优化方式吗?

请注意 –可能需要在用户键入时(在每个键上)进行此检查,并且我无法频繁地点击后端数据库。 我还没有为同样的目的找到任何现成的插件。 请检查我之前的问题任何jquery 1.3兼容插件,使用用户文本输入过滤下拉列表,并根据与此匹配的输入字符串数量进行分组 。 如果您知道任何可以解决问题的插件,请在那里发布。 但无论如何都期待着解决这个问题。

谢谢

有些事情(不完全有效):

 $(function(){ var $select = $('#mySelectBox'), nonMatches = [], $text = $('#myTextBox').keyup(function(){ // find all the words var words = $text.val().split(' '), options = [] // nonMatches is an array of  

您可以使用数组filter过滤掉结果。 这将为您提供一系列子元素。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/filter

 function isBigEnough(element, index, array) { return (element >= 10); } var filtered = [12, 5, 8, 130, 44].filter(isBigEnough); // filtered is [12, 130, 44] 

您可以使用sort函数按长度排序

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

 var numbers = ["aa", "b"]; numbers.sort(function(a, b) { return a.length - b.length; });