javascript - 如何更快地索引 Javascript 中的对象数组?

标签 javascript jquery performance autocomplete

为了构建 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/

相关文章:

jquery - 单击链接时更改/隐藏 div

javascript - 仅显示具有相同类名的多个 div 标签的不同值的最佳方法

python - 如何比较 Dataframe 中的多值重复项

performance - Java 堆瓶颈 - 如何确定原因?

javascript - 将 mongodb 数据库连接公开到 Next.js 6 应用程序中的页面

javascript - js继承与instanceof

javascript - map : trigger a function on 'select'

javascript - 某些路由会跳转到 404 错误页面 Express

javascript - 如何修改表单操作添加选定的单选按钮值

MySQL:查询互斥记录集