Jaa*_*ayz 6 javascript arrays time-complexity spread
我想知道在 JavaScript 中使用带有数组的 spread 的时间复杂度是多少。它是线性 O(n) 还是常数 O(1)?
下面的语法示例:
let lar = Math.max(...nums)
Run Code Online (Sandbox Code Playgroud)
Cer*_*nce 13
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);
}Run Code Online (Sandbox Code Playgroud)
有关实时示例,请查看以下代码段如何花费一些时间来执行:
const arr = new Array(3e7).fill(null);
const t0 = performance.now();
const arr2 = [...arr];
console.log(performance.now() - t0);Run Code Online (Sandbox Code Playgroud)
(如果操作是O(1),它几乎是瞬时的,但它不是)
参数扩展与数组扩展不同,但它使用相同的操作(遍历可迭代对象直到耗尽),因此具有相同的复杂性。
对于函数调用:
Run Code Online (Sandbox Code Playgroud)myFunction(...iterableObj);