访问对象中数据的复杂性

时间:2017-07-23 15:44:03

标签: javascript json node.js time-complexity

在我作为日常工作的一部分工作的一些项目中,我需要访问非常大的JS对象中的数据(大约数千个键值对)。我试图提高代码的效率,所以我提出了几个问题:

  1. 访问此类对象中的字段时,JS的运行时复杂性是多少? 我最初的预感是它的O(n)
  2. 通过点表示法或括号表示法访问时有区别吗? (例如obj.field vs obj[field]
  3. 我猜测不同的运行时引擎有不同的答案 - 我可以在哪里看到它们之间的区别吗?

2 个答案:

答案 0 :(得分:9)

Javascript对象实际上是哈希值,因此所有引擎的复杂度为O(1)

obj.fieldobj['field']的别名,因此它们具有相同的效果。

您可以找到一些JS哈希性能测试here,遗憾的是仅适用于您的浏览器引擎。

答案 1 :(得分:0)

在最坏的情况下,JS对象查找的复杂度为O(1),这是哈希表查找的复杂度。不幸的是,您的情况最糟糕,因为您的对象中有太多物品。 obj.fieldobj['filed']的访问方式没有什么不同。

还值得一提的是,复杂度并不总是等于哈希表查找的复杂度,在许多情况下它会更快。现代JS引擎使用称为隐藏类 inline caching 的技术来加快查找速度。这是一个很大的问题,这些技术如何工作,我在another answer中对此做了解释。

一些相对资源: