---
title: "Структуры данных в JavaScript: множество, словарь или массив"
url: https://algopath.pro/ru/blog/struktury-dannyh-javascript
language: ru
summary: "Структуру данных выбирают по вопросу, который ты задаёшь чаще всего. Четыре вопроса, таблица цен и случаи, где массив всё ещё выигрывает."
updated: 2026-10-20
---

# Структуры данных в JavaScript: множество, словарь или массив

**Короткий ответ.** Структуру выбирай по вопросу, который задаёшь чаще всего. «Видел ли я это раньше?» Множество. «Какое значение у этого ключа?» Словарь. «Какое сейчас минимальное?» Куча. «Что на позиции i, и важен ли порядок?» Массив. Множество и словарь отвечают за один шаг, неотсортированный массив проходит все элементы.

 

## Четыре вопроса

 

**«Видел ли я это раньше?»** [Множество](https://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%BE%D0%B6%D0%B5%D1%81%D1%82%D0%B2%D0%BE_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)). Проверка за один шаг при любом размере.

 

**«Какое значение у этого ключа?»** [Ассоциативный массив](https://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2). Та же скорость, и он несёт с собой данные.

 

**«Какое сейчас минимальное?»** [Куча](https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D1%87%D0%B0_(%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)). Вставка и снятие минимума за log n.

 

**«Что лежит на позиции i, и важен ли порядок?»** Массив.

 

Почти каждая задача первой половины программы это один из четырёх в костюме.

 

Первые два живут в паттерне [хеш-множество и словарь](/ru/patterns/hash-set-map).

 

## Цена одной и той же операции

 

Найти один элемент:

 

- Неотсортированный массив: шаг на каждый элемент.
- Отсортированный массив: log n бинарным поиском.
- Множество или словарь: один шаг в среднем.
- Куча: один шаг для минимума. Для остального полный проход.

 

Первая строка и превращает решения в квадратичные.

 

Проверка вхождения внутри цикла это два вложенных прохода. На экране выглядит как один.

 

## Когда массив всё ещё выигрывает

 

Множество не бесплатное. Оно хеширует ключ, идёт по указателю, прыгает в другое место памяти.

 

Примерно до 100 элементов проход по массиву часто быстрее.

 

Современные [кеши процессора](https://ru.wikipedia.org/wiki/%D0%9A%D1%8D%D1%88_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D0%B0) построены под непрерывную память.

 

Ещё два случая.

 

Массив, индексированный маленькими целыми числами, обходит словарь по всем статьям.

 

Какой вариант разрешён, решают [ограничения входа](/ru/blog/tablitsa-slozhnosti-algoritmov).

 

Порядок, сортировка или «элемент перед этим» требуют массива или дерева. Хеширование уничтожает порядок по своей природе.

 

## Три ошибки, которые стоит назвать

 

**Словарь там, где хватило бы множества.** Все значения true? Нужно было множество.

 

Множество меньше и говорит то, что ты имел в виду.

 

**Ключи обычного объекта в JavaScript.** Объект превращает любой ключ в строку.

 

Поэтому `1` и `"1"` попадают в одну ячейку. А объект в роли ключа становится «[object Object]».

 

Ключи, которые не строки, требуют [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map).

 

**Удалить не то.** Счётчик упал до нуля, а ключ остался на месте.

 

Нули ломают проверку «есть ли такой ключ» молча.

 

Дошёл до нуля, удаляй ключ.

 

## Как решить за десять секунд

 

До первой строки кода закончи предложение: «операция, которую я сделаю тысячи раз, это _____».

 

Потом возьми структуру, которая делает эту операцию за один шаг.

 

Скажи это вслух на собеседовании. Выбор структуры с названной причиной и есть то, что проверяют.

 

## Где это в треке

 

[AlgoPath](/ru) тратит шаги с 11 по 13 на один этот выбор. С кодом, который пишешь ты, до первого именованного паттерна.

 

Ценовая сторона выбора в статье [Big O без математики](/ru/blog/big-o-prostymi-slovami).

 

Первые 33 шага бесплатные.
