javascript - 如何使用类别限制 jQuery 自动完成的结果?

标签 javascript jquery jquery-ui jquery-autocomplete

我想对 jQuery 自动完成结果进行分类 as in the documentation ,但我也想限制每个类别中的结果数量。我了解如何使用 an if statement 限制 结果的数量或 slice ,但我不知道如何将它们与类别功能结合使用。

假设我的数据是这样的:

var data = [
  { label: "Location #1", category: "city" },
  { label: "Location #2", category: "city" },
  { label: "Location #3", category: "city" },
        // ...more locations \\
  { label: "Location #25", category: "city" },
  { label: "Person #1", category: "people" },
  { label: "Person #2", category: "people" },
  { label: "Person #3", category: "people" },
        // ...more people  \\
  { label: "Person #25", category: "people" }
];

如果我使用上述方法之一将结果数限制为 5,这会影响结果的总数,因此如果用户开始在搜索字段中键入“o”,他们将见:

城市: 位置 #1、位置 #2、位置 #3、位置 #4、位置 #5

然而,我想显示的是 5 个位置 5 个人的限制:

城市: 位置 #1...位置 #5

...接着是:

人: 第 1 人...第 5 人

我的实际数据来自 CartoDB 中更复杂的 SQL 查询,但这里有一个简单的 JSFiddle 应该足够了:http://jsfiddle.net/vqwBP/577/

最佳答案

Javascript Array.Filter 方法可以满足您的需求。谓词函数 fn 必须为每个类别跟踪一个计数器,因此它被包装在一个闭包中以维护此状态信息。 counter 对象必须扩展以准确反射(reflect)所有可能的类别(区分大小写)。

var predicate = function () {
    var counter = { city: 0, people: 0, elves: 0 };
    var fn = function(item) {
        counter[item.category] += 1;
        return (counter[item.category] <= 5);
    }
    return fn;
}();

response(results.filter(predicate));

试试 http://jsfiddle.net/Cfp2N/3/ .

关于javascript - 如何使用类别限制 jQuery 自动完成的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553793/

相关文章:

javascript - 在 react-native-maps 中渲染多个标记

javascript - HTML - 两个表单,通过 'enter' 按键知道我正在输入哪个表单

javascript - 像这样设置 jQuery UI slider 的样式

jquery-ui - 如何在 JSF 页面中包含外部 Javascript 文件

javascript - 具有多个输入的 jQuery 自动完成 - django-dynamic-formset

javascript - 切换可丢弃

javascript:选择具有正确内容的类(class)

javascript - 使用keyup功能而不改变编辑文本

JavaScript 日期/时间转换

javascript - 如何在 jquery mobile/中使用范围输入