【发布时间】:2020-09-26 13:32:02
【问题描述】:
我在反应中递归地过滤一个大型 javascript 对象(37000 行的 JSON 文件)。在我过滤了对象后,我将它作为道具发送给渲染对象的组件。
这是我目前的功能,它适用于所有较小的文件,但对于较大的文件来说它相当慢。我可以对该功能进行任何改进以使其执行得更快吗?
export const filterBySubstringKey = (data: any, value: string) => {
const iterate = (object: any, result: any) => {
return Object.keys(object).reduce((acc, key) => {
let tempResult = {};
if (key.toLowerCase().indexOf(value.toLowerCase()) !== -1) {
result[key] = object[key];
return true;
}
if (object[key] !== null && typeof object[key] === 'object' && iterate(object[key], tempResult)) {
result[key] = tempResult;
return true;
}
return acc;
}, false);
};
let result = {};
iterate(data, result);
return result;
};
【问题讨论】:
-
第一个优化我可以看到
value.toLowerCase(),只需执行一次并存储在一个变量中。 -
Next ->
Object.keys,因为您可能也在追求价值,您可能会更改为Object.entries而不是object[key] -
感谢您的建议。更改 lowerCase 值是一种快速的方法。但是,当我按值搜索时,会调用一个单独的类似函数。
-
您可以尝试重写代码以使用循环而不是递归,因为循环通常更快 (stackoverflow.com/questions/9386375/…)
标签: javascript json reactjs