繁体   English   中英

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

[英]How can I index an array of objects in Javascript faster?

为了构建 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) 算法。 一遍又一遍地查看关键字数组会变得非常慢(正如您所注意到的)。

相反,将关键字保留为 object:

var keywords = {};

    // ... inside your ".each():
    if (v && !keywords[v])
      keywords[v] = true;

请注意,您对未定义的“v”测试 null 和空字符串可以通过让 JavaScript 检查它的真实性来替换。 这并不总是正确的,但在这里很好。

如果愿意,您还可以将关键字保存在数组中。 只是不要搜索数组来确定是否已经看到了关键字。

我认为您正在尝试解决错误的问题

为什么您的自动建议列表如此之大,以至于 javascript 表现不佳? 只需将前 10 条自动建议发送给客户就可以了

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM