节点快速查找数组

问题描述 投票:-1回答:1

我有个问题。

当我的阵列中只有多达5000个对象时,我的脚本运行得很好而且速度很快。

现在有超过20,000个对象,它运行得越来越慢......

这就是我所说的

    for(var h in ItemsCases) {
        if(itmID == ItemsCases[h].sku) {

对于每个对象使用“for”并检查sku在哪里是我的itmID,因为我不想要每个ItemsCases。每次只有少数。

但是什么是最快和最好的方式来获取我需要的天空项目?

我想我的,不是最快的......

我现在使用该代码获得多个项目

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) {

skus也是一个数组

arrays node.js
1个回答
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);

通过对数组进行预排序,然后在其上使用二进制搜索,可以实现折衷(不是更多的内存,而是一些加速),这比在无准备的数组上必须进行的线性搜索要快得多。

© www.soinside.com 2019 - 2024. All rights reserved.