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

标签 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 存储中,以便稍后访问它们。

我需要使用这些数据执行许多操作,例如:deleteGroup , findGroup , deleteItem , findItem , ... 所有这些操作都是通过 ID 进行的。

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

我看到 3 个选项:

  1. 在后端将对象数组转换为对象的对象,然后使用对象[id]访问项目(后端重)
  2. 在客户端将对象数组转换为对象的对象,然后使用对象[id]访问项目(主要在客户端)
  3. 使用array.findIndex(i => i.id == 3)在客户端

array.findIndex比使用 id 键将数组转换为对象更快吗? 还有另一种选择如何实现相同但更快的效果吗?

最佳答案

Which one is faster?

这要看情况,所以我无法回答。但是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) 您是否有未使用的服务器资源(您是按实例付费还是基于使用情况付费)?如果是,则将计算转移到服务器没有成本,否则您应该考虑将这些转移到客户端,因为客户端是免费的。另:哪一个更快?普通客户端还是您的服务器?

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

关于javascript - 哪一个更快? `array.findIndex` 与 `array.reduce` + `object[index]`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58397535/

相关文章:

javascript - 如果嵌套对象具有特定值,则从数组中删除对象

javascript - Internet Explorer 和 Base64 图像显示

arrays - 在go错误中使用 slice 和数组

javascript - 在内容更新时保留复选框值

javascript - 在 JQuery 中使用 fadeToggle() 修复淡入淡出的文本

arrays - Drupal 8 - 如何访问嵌套在数组结构深处的字段值

c - 尝试在用户定义的函数中操作 char 数组的元素时收到错误

java - int[] 是一个对象吗?

javascript - 如何使用 JS spread rest destruction 删除嵌套属性?

Java:构造Locale对象时NullPointerException导致的ExceptionInInitializerError