> Какие проверки можно применить к массиву в JSON (JavaScript)

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

Компании: Цитадель

Стек: JavaScript

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

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

В JSON массив - это упорядоченная коллекция значений. Основные проверки: валидация структуры (является ли массивом), проверка длины, типов элементов, уникальности, диапазона значений, вложенности, а также соответствие схеме (JSON Schema). На практике часто проверяют, что массив не пуст, содержит ожидаемые типы данных и не превышает лимиты по размеру или глубине.

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

При работе с JSON-массивами на фронтенде проверки делятся на несколько категорий:

  1. Структурная валидация - убедиться, что данные действительно массив (Array.isArray), а не объект или примитив. Это базовая защита от некорректного API.

  2. Проверка длины - массив не должен быть пустым, если ожидаются данные, или наоборот, не превышать допустимый лимит (например, 1000 элементов для пагинации).

  3. Типизация элементов - каждый элемент должен соответствовать ожидаемому типу: строка, число, объект с определённой структурой. Это критично для TypeScript-проектов и при работе с формами.

  4. Уникальность - проверка на дубликаты, если массив представляет идентификаторы или ключи.

  5. Диапазон значений - для числовых массивов проверка min/max, для строк - длина или соответствие регулярному выражению.

  6. Вложенность - глубина массива не должна превышать разумный предел (например, 3 уровня), чтобы избежать проблем с производительностью и рекурсией.

  7. Соответствие схеме - использование 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).
  • Валидация каждого элемента без учёта производительности для больших массивов.
  • Отсутствие обработки вложенных массивов - рекурсивная проверка нужна, если структура сложная.

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

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