Javascript 中对象扩展运算符的时间复杂度是多少?

Tru*_*rue 2 javascript time-complexity

我发现有一些关于扩展运算符时间复杂度的问答,但这些都是针对数组的。

对象的扩展运算符时间复杂度是否相同?

a = { ...b }
Run Code Online (Sandbox Code Playgroud)

如果b的键数为N,则上述语句的时间复杂度是多少?

是O(N)吗?

Cer*_*nce 6

它是O(n)。对象传播会迭代所有可枚举的自身属性并将其分配给新的对象,属性分配是一个O(1)过程。如果有 N 个键要迭代,则大约需要执行 N 个这样的操作。

也就是说,这不会成为 99.9% 实际代码的瓶颈,因此不值得担心。

  • 我能想到的唯一方法是执行“Object.create(originalObj)”。它不完全是一个副本——它将是内部原型。可能适合您的目的 - 但在这种情况下速度**不是**一个需要担心的问题。别打扰,国际海事组织。 (3认同)
  • @True [哪个更快?](https://ericlippert.com/2012/12/17/performance-rant/) (2认同)
  • @netotz“是什么导致应用程序变慢?” 绝大多数时候,应用程序中的随机代码“不是”瓶颈。如果应用程序运行速度太慢,通常会有*一个*或*两个*或*三个*左右的代码部分导致问题 - 这些部分仅占实际代码库的 1%。包含“Object.assign”的行不太可能导致性能问题 - 如果存在问题,则可能是在其他地方。 (2认同)
  • 一个好的通用方法是,在运行性能测试并且可以识别应用程序正常运行时导致缓慢的部分之前,不要担心速度。在此之前不要尝试优化,因为针对非瓶颈的微优化会使代码更难以理解。首先争取干净、可读的代码,只有在有实际问题需要修复时才考虑性能。 (2认同)