哪一个更快? `array.findIndex`与`array.reduce` +`object [index]`

时间:2019-10-15 14:56:12

标签: javascript arrays object search indexof

我在React Native中有客户端应用程序。此应用使用服务器REST API。

这是来自API的数据示例:

组:

[
   {
      "id":1,
      "name":"example1",
      "items":[
         {
            "id":1,
            "name":"example1",
            "example":123
         },
         {
            "id":2,
            "name":"example1",
            "example":123
         }
      ]
   },
   {
      "id":2,
      "name":"example1",
      "items":[
         {
            "id":3,
            "name":"example1",
            "example":123
         },
         {
            "id":4,
            "name":"example1",
            "example":123
         }
      ]
   }
]

我将这些数据保存到Redux存储中,以便以后可以访问它们。

我需要使用此数据执行许多操作,例如:deleteGroupfindGroupdeleteItemfindItem,... 所有这些操作都是按ID进行的。

我的问题是,通过ID搜索值的最快方法是什么。

我看到3个选项:

  1. 对象数组转换为后端的对象对象,然后使用 object [id] 访问项目(后端很重)< / li>
  2. 对象数组转换为客户端上的对象对象,然后使用 object [id] 来访问项目(客户端上很重)< / li>
  3. 在客户端上使用array.findIndex(i => i.id == 3)

array.findIndex比用id键将数组转换成对象快吗? 还有另一种方法可以实现相同但更快吗?

1 个答案:

答案 0 :(得分:1)

  

哪个更快?

这要看情况,所以我无法回答。但是you can

点击该链接,阅读该文章。我只是想为这个确切的案例添加一些注意事项。四个问题:

A)“对象的对象”或“对象的数组”是否更短以JSON表示(因此更快地传输到客户端)?请记住,许多客户的带宽非常有限,因此加载时间是一项功能。如果加载速度更快,更多的人可以使用它。

B)您可以在不同的客户端之间共享该计算结果吗?在这种情况下,将计算移至服务器可能更有意义(如果这与A冲突不大)。

C)您实际上经常 在一页加载时通过id查找对象吗?将数组转换为查找结构通常是O(n),但是比较重(分配内存,计算哈希),而搜索速度也很快(O(n))。映射查找为O(1),因此查找次数越多,查找结构更有效率的可能性就越大。而且,您拥有的元素越多,与搜索相比,查找的效率就越高。遍历10个元素可能比计算散列并查找散列要快,因此对于小型数据集,散列表可能永远没有更高的效率。

  lookupEfficiency = timeToBuildTable * n + numberOfLookups * lookupCost * 1;
  arrayEfficiency = numberOfLookups * n * searchCost;

D)您是否有未使用的服务器资源(您是否按实例或使用量付费)?如果是,则将计算移至服务器上无需花费 ,否则,您应考虑将计算移至客户端,因为客户端是免费的。另外:哪一个更快?普通客户还是您的服务器?

如您所见,对于“哪个更快?”没有明确的答案。也不是“哪个更好?”。问问自己上面的问题,获取一些数据(测试它!),然后做出决定。