【发布时间】:2016-11-02 18:08:07
【问题描述】:
我想知道为预先输入过滤一组对象的最快方法是什么?
给定一个包含 10000 个或更多与此类似的项目的列表:
[{name: "ben"}, {name: "Alex"}, {name: "mary"}]
我可以使用Array.prototype.filter 方法对它们进行预输入过滤,但我发现在返回结果之前有相当长的延迟时间。有没有更好的方法来根据键盘输入过滤大型列表?
这是我当前的实现:
const list = [{...}] //list of 10000 or more objects with a name property
function getFilteredList(input) {
const reg = new RegExp(input.toLowerCase(), 'i');
return list.filter(i => reg.test(i.name));
}
有没有比使用Array.prototype.filter 方法更快或性能更好的过滤列表的方法?
【问题讨论】:
-
那个过滤器还能用吗?如果
list包含对象,则调用reg.test({name: "ben"})似乎不起作用...您也需要查看“去抖动”您的方法调用。 -
这真的取决于实际数据。可能删除
RegExp调用会使其更快。对于示例数据,我会将数组展平为所有设置为小写的名称,然后将输入小写,并与indexOf进行比较。在比较性能时,获得“正确”答案的唯一方法是尝试一些东西,测试,然后尝试其他东西。 -
谢谢迈克!你是对的,我将不得不更新我的例子,过滤器 RegEx 才能工作。你是对的,测试和查看有效的方法是要走的路。我没有想到字符串数组的索引。谢谢!
标签: javascript arrays performance