Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在数组中查找节点的快速方法_Arrays_Node.js - Fatal编程技术网

Arrays 在数组中查找节点的快速方法

Arrays 在数组中查找节点的快速方法,arrays,node.js,Arrays,Node.js,我有个问题 当我的数组中只有5000个对象时,我的脚本运行得又快又好 现在有超过20000个对象,运行速度越来越慢 我就是这么叫它的 for(var h in ItemsCases) { if(itmID == ItemsCases[h].sku) { 用“for”表示每个对象,并检查sku在我的itmID中的位置,因为我不希望每个项目都有库存。每次只有很少一部分 但什么是最快和最好的方式,以获得与sku的项目,我需要它 我想我的,不是最快的 我现在得到多个项目与该代码

我有个问题

当我的数组中只有5000个对象时,我的脚本运行得又快又好

现在有超过20000个对象,运行速度越来越慢

我就是这么叫它的

    for(var h in ItemsCases) {
        if(itmID == ItemsCases[h].sku) {
用“for”表示每个对象,并检查sku在我的itmID中的位置,因为我不希望每个项目都有库存。每次只有很少一部分

但什么是最快和最好的方式,以获得与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) {
sku也是一个数组

ItemsCases.find(item=>item.sku==itmID)
(或类似于您的循环的
,具体取决于实现)是使用数组所能做的最快的(如果可以返回多个项目,请使用
过滤器
,而不是
查找

如果需要更快,请使用
贴图
或对象查找。它确实需要准备和记忆,但如果你搜索了很多,它可能很值得。例如,使用
地图

// 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);

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

这取决于您的查询。你是否总是使用
itmID
===
,而不是
==
。它比我的查找方式慢。。。你能给我举一个map的例子吗?那么除非你准备好数据,否则你会被困在当前的速度。如果你告诉我你每个sku只有一个项目,或者多个项目可以共享一个sku,我可以。另外,如果数组是固定的,或者您更改了其中的内容。@Rajesh我担心这些测试没有多大意义,因为您正在基准测试中做准备工作,这是没有信息的。如果您担心启动成本,那么启动需要一个单独的基准,搜索本身也需要一个单独的基准。