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

标签 javascript arrays time-complexity spread

我想知道在 JavaScript 中使用带有数组的传播的时间复杂度是多少。是线性 O(n) 还是常数 O(1)?
下面的语法示例:

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

最佳答案

点差调用[Symbol.iterator]有问题的对象的属性(property)。对于数组,这将遍历数组中的每一项,调用数组迭代器的 .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) ,它几乎是瞬时的,但不是)
参数传播与数组传播不同,但它使用 same operation (遍历可迭代对象,直到用完为止),因此具有相同的复杂性。

For function calls:

myFunction(...iterableObj);

关于javascript - 数组中 JavaScript 展开语法的时间复杂度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032373/

相关文章:

javascript - 在 window.location 中使用 JS 变量

javascript - 我怎样才能通过使用 HTML、CSS 和 JavaScript 来实现这样的效果(参见内部)?

arrays - Golang中比较两个 slice 并删除唯一值

c# - 根据索引将空白字符串插入数组

arrays - 一维数组中非相邻元素的最大总和

javascript - 带有 node.js promise 的 RPC

javascript - 用于切换 css 模板 Bootstrap 的按钮

arrays - 如何在powershell中将string.format与字符串数组一起使用

java - HashMap#replace 的复杂度是多少?

algorithm - 将给定的伪代码复杂度从 O(N^4) 降低到 O(NlogN) 或更小