【发布时间】:2021-05-23 07:21:30
【问题描述】:
假设我想使用数组扩展语法复制现有数组,如下所示:
const a = [1, 2, 3, ..., n];
const b = [...a]
const b = [...a] 的运行时复杂度是多少?我似乎找不到任何相关信息。
【问题讨论】:
-
旁注:
...不是运算符。操作员不能做...所做的事情。...是主要语法。 -
你知道语法的作用吗?你知道“复制数组”的运行时复杂度是多少吗?
-
@Bergi 根据 mdn,扩展语法“允许在零个或多个参数(用于函数调用)或元素(用于数组文字)的地方扩展诸如数组表达式或字符串之类的迭代是预期的”,即在我们的例子中它扩展了数组。所以看起来应该是O(n)。但我不太确定幕后会发生什么 - 如果像
const b = [...a]这样调用,也许 js 正在做某种优化? -
@Maksym 是的,就是这样。在引擎盖下它运行迭代器,尽管当然对于数组引擎可能会优化它以不创建迭代器对象并在其上重复调用
next()(并且还可以分配具有正确大小的新数组)。它仍然需要将所有元素从一个数组复制到新数组,就像.slice()一样,即O(n)。
标签: javascript algorithm performance ecmascript-6