Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: string concatenation, performance, array join, memory allocation, immutability

Есть миллион строк. Как эффективно объединить их в одну? Почему наивная конкатенация неэффективна?

Вопрос проверяет понимание эффективных методов работы со строками в JavaScript и причин неэффективности наивной конкатенации.

Короткий ответ

Наивная конкатенация строк через оператор '+' создает новую строку на каждой итерации, что приводит к квадратичной сложности O(n²) по памяти и времени. Для эффективного объединения большого количества строк используйте метод массива join(), который сначала собирает строки в массив, а затем объединяет их за один проход, имея сложность O(n).

Длинный ответ

Проблема наивной конкатенации

Строки в JavaScript являются неизменяемыми (immutable). Когда вы используете оператор '+' для объединения строк, создается новая строка, содержащая копию обеих исходных строк. При конкатенации миллиона строк в цикле каждая новая итерация копирует всю предыдущую накопленную строку, что приводит к квадратичной сложности O(n²) по времени и памяти. Например, для 1 миллиона строк потребуется около 500 миллиардов операций копирования символов.

Эффективное решение: массив и join()

Метод join() сначала собирает все строки в массив, а затем за один проход объединяет их, выделяя память ровно под итоговую строку. Это дает линейную сложность O(n).

// Неэффективно: O(n²)
let result = '';
for (let i = 0; i < 1000000; i++) {
  result += 'строка ' + i;
}

// Эффективно: O(n)
const parts = [];
for (let i = 0; i < 1000000; i++) {
  parts.push('строка ' + i);
}
const result = parts.join('');

Дополнительные оптимизации

В современных движках JavaScript (V8, SpiderMonkey) есть оптимизации для простых случаев конкатенации, но они не гарантированы для больших объемов. Для максимальной производительности всегда используйте массив и join().

Вывод: Используйте метод join() массива для объединения большого количества строк. Это стандартный и самый эффективный подход в JavaScript, который следует применять всегда, когда количество строк превышает несколько десятков.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#string concatenation

#performance

#array join

#memory allocation

#immutability

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.