JavaScript 在数组中展开语法的时间复杂度是多少?

What's the time complexity of JavaScript spread syntax in arrays?

我想知道在 JavaScript 中对数组使用 spread 的时间复杂度是多少。它是线性 O(n) 还是常数 O(1)?

语法示例如下:

let lar = Math.max(...nums)

Spread 在相关对象上调用 [Symbol.iterator] 属性。对于数组,这将遍历数组中的每个项目,调用数组迭代器的 .next() 直到迭代器耗尽,导致复杂度 O(N).

出于完全相同的原因,for..of(也称为 [Symbol.iterator])循环也是 O(N):

const arr = [1, 2, 3];
for (const item of arr) {
  console.log(item);
}

有关实际示例,请查看以下代码段如何花费 一些时间 来执行:

const arr = new Array(3e7).fill(null);
const t0 = performance.now();
const arr2 = [...arr];
console.log(performance.now() - t0);

(如果操作是 O(1),它会接近瞬时,但它不是)

Argument spread 不同于 array spread,但它使用 same operation(遍历 iterable 直到耗尽),因此具有相同的复杂性。

For function calls:

myFunction(...iterableObj);