> Какие проверки можно применить к массиву в JSON (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Цитадель
Стек: JavaScript
> Пример ответа
Короткий ответ
В JSON массив - это упорядоченная коллекция значений. Основные проверки: валидация структуры (является ли массивом), проверка длины, типов элементов, уникальности, диапазона значений, вложенности, а также соответствие схеме (JSON Schema). На практике часто проверяют, что массив не пуст, содержит ожидаемые типы данных и не превышает лимиты по размеру или глубине.
Подробное объяснение
При работе с JSON-массивами на фронтенде проверки делятся на несколько категорий:
-
Структурная валидация - убедиться, что данные действительно массив (Array.isArray), а не объект или примитив. Это базовая защита от некорректного API.
-
Проверка длины - массив не должен быть пустым, если ожидаются данные, или наоборот, не превышать допустимый лимит (например, 1000 элементов для пагинации).
-
Типизация элементов - каждый элемент должен соответствовать ожидаемому типу: строка, число, объект с определённой структурой. Это критично для TypeScript-проектов и при работе с формами.
-
Уникальность - проверка на дубликаты, если массив представляет идентификаторы или ключи.
-
Диапазон значений - для числовых массивов проверка min/max, для строк - длина или соответствие регулярному выражению.
-
Вложенность - глубина массива не должна превышать разумный предел (например, 3 уровня), чтобы избежать проблем с производительностью и рекурсией.
-
Соответствие схеме - использование JSON Schema или библиотек вроде zod, yup для комплексной валидации.
На практике эти проверки применяются в middleware для обработки ответов API, при парсинге WebSocket-сообщений и в формах с динамическими полями.
На практике
В реальных проектах проверки массива в JSON обычно выносятся в утилиты или middleware. Например, при получении списка товаров с сервера нужно убедиться, что это массив объектов с полями id, name, price. Если массив пуст - показать заглушку, если тип неверный - выбросить ошибку или записать в лог.
Для форм с повторяющимися полями (например, список телефонов) проверяют, что каждый элемент - строка определённого формата, и массив не превышает лимит (скажем, 10 номеров). Это предотвращает отправку мусора на сервер.
В React-приложениях часто используют кастомные хуки для валидации JSON-данных, где проверки массива - часть общего пайплайна. Если данные приходят из ненадёжного источника (например, localStorage), проверки обязательны.
Пример кода
JAVASCRIPT// Утилита для проверки массива объектов с определённой схемойfunction validateArray(data, schema) {if (!Array.isArray(data)) {return { valid: false, error: 'Данные не являются массивом' };}if (data.length === 0) {return { valid: false, error: 'Массив пуст' };}if (data.length > 1000) {return { valid: false, error: 'Массив превышает лимит в 1000 элементов' };}for (let i = 0; i < data.length; i++) {const item = data[i];if (typeof item !== 'object' || item === null) {return { valid: false, error: `Элемент ${i} не является объектом` };}for (const key of Object.keys(schema)) {if (!(key in item)) {return { valid: false, error: `Элемент ${i} не содержит поле ${key}` };}if (typeof item[key] !== schema[key]) {return { valid: false, error: `Поле ${key} в элементе ${i} имеет неверный тип` };}}}return { valid: true };}// Использованиеconst schema = { id: 'number', name: 'string', price: 'number' };const result = validateArray(jsonData, schema);if (!result.valid) {console.error(result.error);}
Как отвечать на собеседовании
Начни с базовой проверки Array.isArray, затем перечисли практические сценарии: пустой массив, типы элементов, лимиты. Упомяни JSON Schema как стандартный подход для сложных структур. Приведи пример из опыта - например, как ты обрабатывал ответ от API, где массив мог прийти как null. Покажи понимание trade-off: избыточная валидация замедляет код, но повышает надёжность.
Что проверяет интервьюер
Интервьюер оценивает:
- Понимание различий между JSON и JavaScript-массивами (JSON - строка, массив - структура данных).
- Умение проектировать защитное программирование: не доверять внешним данным.
- Знание граничных случаев: пустой массив,
null, неожиданные типы. - Практический опыт: как такие проверки встраиваются в архитектуру (middleware, хендлеры ошибок).
Типичные ошибки
- Использование
typeof data === 'object'вместоArray.isArray- не различает массив и объект. - Игнорирование проверки на
null-typeof null === 'object'. - Проверка длины только на пустоту, без учёта максимального лимита (уязвимость к DoS).
- Валидация каждого элемента без учёта производительности для больших массивов.
- Отсутствие обработки вложенных массивов - рекурсивная проверка нужна, если структура сложная.
> Похожие задачи по frontend
Как предотвратить двойной заказ при двойном клике на кнопку?
Как реализовать функцию каррирования с использованием замыканий в JavaScript
Как обрабатываются call stack и очереди в JavaScript
В чем разница последовательных и параллельных запросов и как реализовать параллельные запросы в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью