const queryList = event.queryList; const query = _.or(queryList.map(field => ({[field]: _.exists(true)}))); reslist = await col.where(query) .limit(event.limit) .get(); const list = reslist.data const order = event.queryList list.sort((a, b) => { const indexA = order.indexOf(a._id); const indexB = order.indexOf(b._id); return indexA - indexB; }); console.log(list); ps = list怎么优化这段代码
时间: 2023-07-14 07:13:16 浏览: 119
Vue源码中要const _toStr = Object.prototype.toString的原因分析
这段代码可以进行以下优化:
1. 使用 Promise.all() 并行查询,以减少查询时间。
2. 使用 Array.reduce() 一次性构建查询条件。
3. 使用 Map 对象存储每个文档的索引位置,以避免多次调用 indexOf() 方法。
下面是修改后的代码:
```
const queryList = event.queryList;
const query = queryList.reduce((acc, field) => {
acc[`$or`] = acc[`$or`] || [];
acc[`$or`].push({ [field]: _.exists(true) });
return acc;
}, {});
const [reslist, indexMap] = await Promise.all([
col.where(query).limit(event.limit).get(),
new Map(),
]);
const list = reslist.data;
list.forEach((doc, index) => indexMap.set(doc._id, index));
list.sort((a, b) => indexMap.get(a._id) - indexMap.get(b._id));
console.log(list);
ps = list;
```
这样优化后,查询效率应该会有所提高。
阅读全文