Какая сложность алгоритма итерации по новому объекту и добавления туда данных?
Объекты и прототипы
Сложность итерации по объекту и добавления в новый объект — 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²).