Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在非常大的数据集上选择列表搜索_Javascript_Jquery_Jquery Select2 - Fatal编程技术网

Javascript 在非常大的数据集上选择列表搜索

Javascript 在非常大的数据集上选择列表搜索,javascript,jquery,jquery-select2,Javascript,Jquery,Jquery Select2,目前,我在应用程序中选择了2,并且之前实现了对数据库的ajax调用,以根据用户输入的搜索查询获得较小的子集 但是,用户希望能够单击浏览器上的后退箭头,并再次自动运行查询(Select2目前没有出现这种情况)。我可以通过拉入整个数据集(超过18000个元素)并调用select2来实现这一点 问题在于,Select2在执行搜索时基本上在foreach中执行foreach(数据集中的foreach元素,遍历每个字符串并获取查询的索引-我理解这基本上是将字符串分解为一个字符数组,并逐个检查每个字符以查看

目前,我在应用程序中选择了2,并且之前实现了对数据库的ajax调用,以根据用户输入的搜索查询获得较小的子集

但是,用户希望能够单击浏览器上的后退箭头,并再次自动运行查询(Select2目前没有出现这种情况)。我可以通过拉入整个数据集(超过18000个元素)并调用select2来实现这一点

问题在于,Select2在执行搜索时基本上在foreach中执行foreach(数据集中的foreach元素,遍历每个字符串并获取查询的索引-我理解这基本上是将字符串分解为一个字符数组,并逐个检查每个字符以查看是否找到组合)。因此,每当有人键入一个字符时,我们会看到18000多个操作,尽管大多数元素都作为选项被删除

有没有办法让Select2真正消除不匹配的选项(创建并绑定到临时数组或类似的东西)或执行二进制搜索而不是线性搜索?如果没有,Select2是否有其他替代方案可以实现二进制搜索而不是线性搜索,或者我需要创建自己的jQuery插件来实现这一点?

在本1中,使用隐藏的select元素并克隆该元素以过滤输入。过滤通过以下方式完成:

for (var i = 0; i < that.selector.options.length; i++) {
  if (re.test(that.selector.options[i].text)) {
   sclone.add(new Option(that.selector.options[i].text, i));
  }
}
for(var i=0;i
其中,
re
是从位于选择克隆上方的输入字段创建的
RegExp

也许这是个玩的好主意

第一个选择器中使用的语言是荷兰语,但我认为这不应该妨碍这个想法