> Как работает массив tickets в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Яндекс

Стек: JavaScript

> Пример ответа

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

tickets - это не встроенная конструкция JavaScript, а обычный массив, который разработчик создаёт для хранения данных о билетах. Вопрос, скорее всего, относится к типовой задаче: например, к массиву объектов с полями id, price, status. Работа с ним ничем не отличается от любого другого массива: используются методы push, filter, map, reduce, find и другие. Ключевое - понимать, что массив в JS - это динамическая структура, а не фиксированный список.

Подробное объяснение

Массив tickets в JavaScript - это обычный объект с числовыми ключами и специальным поведением. Он может содержать любые типы данных: числа, строки, объекты, вложенные массивы. Основные характеристики:

  • Динамический размер - можно добавлять и удалять элементы без предварительного объявления длины.
  • Индексация с нуля - первый элемент имеет индекс 0.
  • Разреженность - массив может содержать "дыры" (пустые слоты), что влияет на поведение методов перебора.
  • Методы прототипа Array.prototype - forEach, map, filter, reduce, splice, slice и другие.

Если речь о типовом сценарии "билеты" (например, в кинотеатре или на концерт), массив обычно выглядит так:

JAVASCRIPT
const tickets = [
{ id: 1, price: 500, status: 'available' },
{ id: 2, price: 700, status: 'booked' },
{ id: 3, price: 300, status: 'available' }
];

Операции с таким массивом:

  • Поиск - find, filter, some.
  • Сортировка - sort (с осторожностью, мутирует массив).
  • Агрегация - reduce для подсчёта суммы или количества.
  • Обновление - map для создания нового массива с изменёнными полями.

Важно помнить про мутабельность: методы push, pop, splice, sort, reverse изменяют исходный массив, а map, filter, reduce, slice - возвращают новый.

На практике

На собеседовании уровня senior важно показать не только знание методов, но и понимание trade-off'ов. Например:

  • Производительность - filter + map создают промежуточные массивы, что при больших объёмах данных может быть неэффективно. Можно использовать один reduce.
  • Иммутабельность - в современных приложениях (React, Redux) предпочитают не мутировать исходный массив, а создавать новые.
  • Память - массив из миллионов объектов - это нормально, но нужно избегать лишних копий.
  • Сортировка - sort по умолчанию сортирует как строки, поэтому для чисел нужен компаратор.

Пример типовой задачи: "Посчитать сумму всех доступных билетов". Наивное решение - filter + reduce. Оптимальное - один reduce.

Пример кода

JAVASCRIPT
// Исходные данные
const tickets = [
{ id: 1, price: 500, status: 'available' },
{ id: 2, price: 700, status: 'booked' },
{ id: 3, price: 300, status: 'available' }
];
// Сумма всех доступных билетов (без промежуточного массива)
const totalAvailable = tickets.reduce((sum, ticket) => {
return ticket.status === 'available' ? sum + ticket.price : sum;
}, 0);
// Обновление статуса билета (иммутабельно)
const updatedTickets = tickets.map(ticket =>
ticket.id === 2 ? { ...ticket, status: 'sold' } : ticket
);
// Поиск первого доступного билета
const firstAvailable = tickets.find(ticket => ticket.status === 'available');
// Сортировка по цене (без мутации исходного массива)
const sortedByPrice = [...tickets].sort((a, b) => a.price - b.price);

Как отвечать на собеседовании

Начните с уточнения: "Вы имеете в виду типовой массив для хранения билетов или какой-то конкретный кейс?" Это покажет, что вы не гадаете, а уточняете требования. Затем:

  1. Опишите структуру - массив объектов с полями.
  2. Перечислите основные операции: добавление, удаление, поиск, фильтрация, сортировка.
  3. Упомяните разницу между мутирующими и иммутабельными методами.
  4. Приведите пример с reduce для агрегации - это сразу выделит вас среди кандидатов, которые просто перечисляют методы.
  5. Если контекст - фронтенд, добавьте про связь с состоянием (например, в React - useState с массивом, обновление через setTickets).

Что проверяет интервьюер

  • Базовое владение массивами - знание методов и их поведения.
  • Понимание мутабельности - критично для работы с состоянием.
  • Умение выбирать оптимальный метод - например, reduce вместо цепочки filter + map.
  • Внимание к деталям - например, что sort мутирует массив, а find возвращает undefined при отсутствии элемента.
  • Практический опыт - как вы решаете реальные задачи, а не просто знаете теорию.

Типичные ошибки

  • Забывают про мутацию - используют sort или splice и потом удивляются, что исходный массив изменился.
  • Используют forEach вместо map или reduce - это работает, но менее выразительно и часто медленнее.
  • Путают filter и find - первый возвращает массив, второй - один элемент.
  • Не учитывают, что sort сортирует как строки - для чисел нужен компаратор.
  • Создают лишние промежуточные массивы - например, filter + map вместо одного reduce.
  • Не проверяют наличие элемента - find может вернуть undefined, и обращение к свойству упадёт с ошибкой.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью