> Как работает массив 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и другие.
Если речь о типовом сценарии "билеты" (например, в кинотеатре или на концерт), массив обычно выглядит так:
JAVASCRIPTconst 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);
Как отвечать на собеседовании
Начните с уточнения: "Вы имеете в виду типовой массив для хранения билетов или какой-то конкретный кейс?" Это покажет, что вы не гадаете, а уточняете требования. Затем:
- Опишите структуру - массив объектов с полями.
- Перечислите основные операции: добавление, удаление, поиск, фильтрация, сортировка.
- Упомяните разницу между мутирующими и иммутабельными методами.
- Приведите пример с
reduceдля агрегации - это сразу выделит вас среди кандидатов, которые просто перечисляют методы. - Если контекст - фронтенд, добавьте про связь с состоянием (например, в React -
useStateс массивом, обновление черезsetTickets).
Что проверяет интервьюер
- Базовое владение массивами - знание методов и их поведения.
- Понимание мутабельности - критично для работы с состоянием.
- Умение выбирать оптимальный метод - например,
reduceвместо цепочкиfilter+map. - Внимание к деталям - например, что
sortмутирует массив, аfindвозвращаетundefinedпри отсутствии элемента. - Практический опыт - как вы решаете реальные задачи, а не просто знаете теорию.
Типичные ошибки
- Забывают про мутацию - используют
sortилиspliceи потом удивляются, что исходный массив изменился. - Используют
forEachвместоmapилиreduce- это работает, но менее выразительно и часто медленнее. - Путают
filterиfind- первый возвращает массив, второй - один элемент. - Не учитывают, что
sortсортирует как строки - для чисел нужен компаратор. - Создают лишние промежуточные массивы - например,
filter+mapвместо одногоreduce. - Не проверяют наличие элемента -
findможет вернутьundefined, и обращение к свойству упадёт с ошибкой.
> Похожие задачи по frontend
Почему в JavaScript переменная, объявленная через var, всплывает и инициализируется значением undefined?
Как различать и отличать action в Redux?
Почему Promise.race не подходит для выбора лучшего покупателя в JavaScript
Как написать полифил для метода map в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью