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);
我想知道在 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);