为了构建 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。我怎样才能做得更好?
最佳答案
那里有一个 O(n^2) 算法。一遍又一遍地查看关键字数组会变得真的变慢(正如您所注意到的)。
相反,将关键字保留为一个对象:
var keywords = {};
// ... inside your ".each():
if (v && !keywords[v])
keywords[v] = true;
请注意,您可以通过让 JavaScript 检查其真实性来替换针对未定义、null 和空字符串的“v”测试。这不是总是正确的事情,但在这里没问题。
如果愿意,您也可以将关键字保存在一个数组中。只是不要搜索数组来确定是否已经看到关键字。
关于javascript - 如何更快地索引 Javascript 中的对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536388/