我想对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
对象以准确反映所有可能的类别(区分大小写)。
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/