我有个问题。
当我的阵列中只有多达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也是一个数组
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);
通过对数组进行预排序,然后在其上使用二进制搜索,可以实现折衷(不是更多的内存,而是一些加速),这比在无准备的数组上必须进行的线性搜索要快得多。