提高javascript中多字符串搜索的性能
我正在搜索长度超过10000的大数组集 示例数组应该如下所示提高javascript中多字符串搜索的性能,javascript,arrays,performance,Javascript,Arrays,Performance,我正在搜索长度超过10000的大数组集 示例数组应该如下所示 let data = ['Hello world mr tom', ........]; // array length of 10000 with different strings 这是我的密码 this.results = []; for (let i = 0; i < data.length; i++) { if (input.toLowerCase().split(' ').every(val => dat
let data = ['Hello world mr tom', ........]; // array length of 10000 with different strings
这是我的密码
this.results = [];
for (let i = 0; i < data.length; i++) {
if (input.toLowerCase().split(' ').every(val => data[i].toLowerCase().includes(val))) {
this.results.push(data[i])
}
}
this.results=[];
for(设i=0;idata[i].toLowerCase().includes(val))){
this.results.push(数据[i])
}
}
它正在工作,但加载时间太长。假设在我的数组列表中有一个名为Hello world
的公共字符串,在输入字段中输入该字符串时,加载该字符串花费的时间太长。是否有任何优化方法可以在更短的时间内完成此搜索。- 添加一个去盎司函数。不要立即过滤数据-而是等到用户停止键入500毫秒左右,然后执行过滤操作
(其中,let timeoutId; input.addEventListener('input', () => { clearTimeout(timeoutId); timeoutId = setTimeout(filterResults, 500); });
,当然,使用输入值过滤结果)filterResults
- 在
元素上调用数据
,只需提前调用一次,而不是在循环中的每次迭代或每次输入更改之后:toLowerCase
const data = [/* your data */]; const lowerData = data.map(str => str.toLowerCase()); // then use `lowerData` instead
- 预先对循环外部的输入字符串调用
和toLowerCase
,而不是每次迭代.split
- 客户端不适合处理大量数据,尤其是在低端手机上。表现不佳。对于大量的数据,请考虑做过滤服务器端。
- 如果您别无选择,只能在客户端执行此操作,请在单独的Web Worker中执行计算,以便页面的主UI在运行时保持响应
- 添加一个去盎司函数。不要立即过滤数据-而是等到用户停止键入500毫秒左右,然后执行过滤操作
(其中,let timeoutId; input.addEventListener('input', () => { clearTimeout(timeoutId); timeoutId = setTimeout(filterResults, 500); });
,当然,使用输入值过滤结果)filterResults
- 在
元素上调用数据
,只需提前调用一次,而不是在循环中的每次迭代或每次输入更改之后:toLowerCase
const data = [/* your data */]; const lowerData = data.map(str => str.toLowerCase()); // then use `lowerData` instead
- 预先对循环外部的输入字符串调用
和toLowerCase
,而不是每次迭代.split
- 客户端不适合处理大量数据,尤其是在低端手机上。表现不佳。对于大量的数据,请考虑做过滤服务器端。
- 如果您别无选择,只能在客户端执行此操作,请在单独的Web Worker中执行计算,以便页面的主UI在运行时保持响应
- 我想你可以看看这些算法。您可以尝试使它们适应此问题,甚至适应您可能遇到的其他字符串问题
- 我想你可以看看这些算法。您可以尝试使它们适应此问题,甚至适应您可能遇到的其他字符串问题