我有问题。
当我的数组中最多只有5000个对象时,我的脚本运行良好且速度很快。
现在有超过20.000个对象,并且运行速度越来越慢...
这就是我的称呼
for(var h in ItemsCases) {
if(itmID == ItemsCases[h].sku) {
对于每个对象都带有“ for”,并检查sku在哪里是我的itmID,因为我不需要每个ItemsCases。每次只有几个。
但是,从中取出需要的sku最快最快的方法是什么?
我认为我不是最快的...
我现在用该代码获得了多个物品
var skus = res.response.cases[x].skus;
for(var j in skus) {
var itmID = skus[j];
for(var h in ItemsCases) {
if(itmID == ItemsCases[h].sku) {
骨架也是一个数组
答案 0 :(得分:2)
ItemsCases.find(item => item.sku === itmID)
(或像您这样的for
循环,具体取决于实现)是处理数组最快的方法(如果可以返回多个项目,请改用filter
find
)。
如果需要更快的速度,请使用Map
或对象查找。它确实需要准备和记忆,但是如果您进行了大量搜索,那可能是值得的。例如,使用Map
:
// preparation of the lookup
const ItemsCasesLookup = new Map();
ItemsCases.forEach(item => {
const list = ItemsCasesLookup.get(item.sku);
if (list) {
list.push(item)
} else {
ItemsCasesLookup.set(item.sku, [item]);
}
});
然后,您可以像这样获得同一sku的所有项目:
ItemsCasesLookup.get(itmID);
可以通过对数组进行预排序,然后在其上使用二进制搜索来实现折衷(不占用更多内存,但可以提高速度),这比在未准备好的数组上进行线性搜索要快得多。