为了构建JQuery自动完成所需的字符串数组,我遍历一个对象数组并将其展平为一个唯一字符串数组。我这样做是关于你的期望:
var input = [{prop1:'value1', prop2: 'value2'}];
$.each(input, function (index, value) {
$.each(value, function (i, v) {
if (v != undefined && v != null && v != '' && ($.inArray(v, keywords) < 0)) {
keywords.push(v);
}
});
});
问题是它对于大型input
集合表现不佳,并在运行时阻止UI。我怎样才能做得更好?
答案 0 :(得分:3)
你有一个O(n ^ 2)算法。一遍又一遍地查看关键字数组会让真的变慢(正如您所注意到的那样)。
相反,将关键字保留为对象:
var keywords = {};
// ... inside your ".each():
if (v && !keywords[v])
keywords[v] = true;
请注意,对“undefined”,“null”和空字符串的“v”测试可以通过让JavaScript检查它的真实性来替换。那不是总是正确的事情,但这里很好。
如果您愿意,也可以 将关键字保存在数组中。只是不要搜索数组以确定是否已经看到关键字。
答案 1 :(得分:2)
我认为你正试图解决错误的问题
为什么你的自动提示列表如此之大以至于javascript性能不佳?只需向客户发送十大自动建议,你就没事了