PassFront
  1. PassFront
  2. База знаний
  3. Объекты и прототипы

Какая сложность алгоритма итерации по новому объекту и добавления туда данных?

Объекты и прототипы

Сложность итерации по объекту и добавления в новый объект — O(n), где n — число свойств: один проход по всем свойствам, каждое добавление в среднем O(1).

Разбор сложности

Итерация по объекту

Перебор всех свойств — O(n), где n — количество свойств:

for (const key in obj) {} // O(n)
Object.keys(obj).forEach(...); // O(n)

Добавление в объект

Вставка одного свойства — в среднем O(1) (хеш-таблица):

newObj[key] = value; // O(1) в среднем

Итого

Итерация (n элементов) × добавление (O(1)) = O(n):

const newObj = {};
for (const key in obj) {      // n итераций
  newObj[key] = obj[key];     // O(1) каждая
}
// Итого O(n)

Пространственная сложность

O(n) — новый объект хранит n свойств.

Нюансы

  • В среднем добавление O(1), но при коллизиях в хеш-таблице — до O(n) в худшем (редко).
  • Если внутри цикла есть вложенный проход — сложность растёт (O(n²) при вложенном цикле по тому же объекту).
  • Методы вроде { ...obj } или Object.assign тоже O(n) — копируют все свойства.

Коротко для собеседования

Итерация по объекту и добавление в новый объект — O(n) по времени (n свойств, каждое добавление в среднем O(1)) и O(n) по памяти (новый объект). Копирование через {...obj}/Object.assign тоже O(n). Вложенный проход по тому же объекту дал бы O(n²).

Другие вопросы раздела