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

时间:2015-01-16 15:46:48

标签: javascript jquery jquery-select2

目前我的应用程序中有Select2,并且之前已经对数据库实施了ajax调用,以根据用户输入的搜索查询获得更小的子集。

但是,用户希望能够单击浏览器上的后退箭头,并自动再次运行查询(Select2当前不会发生这种情况)。我能够通过拉入整个数据集(超过18,000个元素)并在其上调用select2来实现这一点。

这个问题是,在进行搜索时,Select2基本上会在foreach中执行foreach(数据集中的foreach元素,遍历每个字符串并获取查询的索引 - 我理解基本上是将字符串分解为char数组并单独检查每个char以查看是否找到了组合。因此,每当有人输入一个角色时,我们就会查看超过18,000个操作,即使大部分元素都作为选项被删除。

有没有办法让Select2实际上消除不匹配的选项(创建并绑定到临时数组或类似的东西)或执行二进制搜索而不是线性搜索?如果没有,是否有任何替代方案可以实现二元搜索而不是线性搜索,或者我是否需要创建自己的jQuery插件才能执行此操作?

1 个答案:

答案 0 :(得分:0)

在此jsfiddle 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));
  }
}

其中re是从放置在选择克隆上方的输入字段创建的RegExp

也许这个想法可以玩吗?

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