我想知道在JavaScript中使用扩展运算符与数组的时间复杂度是多少。它是线性的O(n)还是常数的O(1)?
以下是语法示例:
let lar = Math.max(...nums)
我想知道在JavaScript中使用扩展运算符与数组的时间复杂度是多少。它是线性的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)
,那么它会几乎瞬间完成,但它并不是。)
参数展开与数组展开不同,但它使用相同的操作(迭代可迭代对象直到耗尽),因此具有相同的复杂度。
For function calls:
myFunction(...iterableObj);
...
、for..in、for..of 等方面的任何差异。 :-) - RobG
Math.max.apply(null,nums)
进行比较,或者在主机对象与Array.from(document.getElementsByTagName('p'))
或类似情况下进行比较。 - RobG