【问题标题】:Search structure for autocomplete自动完成的搜索结构
【发布时间】:2017-08-30 15:28:01
【问题描述】:

我有这样的自动完成功能。

data[0] = {code:1,name:"jame"}
data[1] = {code:2,name:"el"}
data[2] = {code:3,name:"hey"}
.
.


$('#txtKeywd').autocomplete({
    source: data.name,
    autoFocus: true,
    delay: 500,
    minLength: 1
});

我可以按名字搜索,所以我可以得到像jameel这样的名字...

不过我最终想要的是code

现在我编写了这段代码。

我可以用它得到最终的答案,但它看起来很多余而且很慢。

你有什么好主意吗?

var txt = $(txtKeywd).val();    
for (i in data.name){

    if (data.name[i] === txt){
        console.log(data.code[i]); // i can get the code here!!! but it takes time....
    }
}

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    您可以使用事件处理程序.change():As the API says,处理此事件的函数将接收选定项作为第二个参数:

    ...
    $('#txtKeywd').autocomplete({
        source: data.name,
        autoFocus: true,
        delay: 500,
        minLength: 1
    }).change(function (event,item) {
        console.log(item.code);
    });
    

    【讨论】:

      【解决方案2】:

      如果您的名称是唯一的,请使用对象哈希,查找时间为 O(1)。

      你可以这样组织它:

      var lookup = 
      {
        jame: 1,
        hey: 3,
        el: 2,
        'a name with spaces': 87
      };
      
      var code = lookup['jame']; // gives 1
      

      注意:

      var code = lookup['jaem']; // gives undefined
      

      还请注意,查找键(名称)需要遵循有效的 JavaScript 变量命名约定,否则您必须将它们放在引号中,双“”或单“”,您的选择

      如果您必须有一个对象数组才能使自动完成工作,那么您可能必须同时使用这两个对象,但从数组中生成查找,例如:

      var lookup = {};
      data.forEach(function(index)
      {
        lookup[data[index].name] = data[index].code;
      });
      

      几个问题,

      1. 您的数据数组有多大?
      2. 您是否只计时了查找时间?
      3. 如果您的列表很小,您是否在代码中执行了不应该出现在查找例程中的其他操作?
      4. 这是您使用的 jQuery UI 自动完成功能吗?

      要优化您拥有的内容,for 循环将比 for in 循环快得多。

      另外,我怀疑您正在使用自动完成功能,因此您会为用户输入的每个前缀获得 n 结果,在这种情况下,查找将不起作用,因此......取决于您的用例和所需的结果,完全使用不同的数据结构可能会更好地为您服务……也许是trieHere is one that was prepared earlierThe author of JQuery has some ideas as well.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-04
        • 2021-12-03
        • 2014-06-15
        相关资源
        最近更新 更多