Для массива проверяйте length, для объекта — количество собственных ключей. null нужно исключить отдельно, поскольку typeof null равен 'object'.
Определение пустоты массива или объекта
Для массива проверяйте length, для объекта — количество собственных ключей. null нужно исключить отдельно, поскольку typeof null равен 'object'.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Создайте функцию, принимающую в качестве аргумента либо массив, либо объект. Если аргумент является массивом и не содержит элементов, функция должна вернуть строку «Пустой массив не содержит элементов». Если аргумент — объект без пар ключ‑значение, функция должна вернуть строку «Пустой объект не содержит пар ключ-значение».
Ответ
Для массива проверяйте length, для объекта — количество собственных ключей. null нужно исключить отдельно, поскольку typeof null равен 'object'.
function describeEmpty(value) {
if (Array.isArray(value)) {
return value.length === 0 ? 'Пустой массив не содержит элементов' : null;
}
if (value !== null && typeof value === 'object') {
return Reflect.ownKeys(value).length === 0
? 'Пустой объект не содержит пар ключ-значение' : null;
}
throw new TypeError('Ожидается массив или объект');
}
Для непустого значения здесь возвращается null — условие не задаёт иной результат. Reflect.ownKeys учитывает также символы и неперечисляемые свойства. Речь об обычных объектах данных, не о содержимом Map/Set. Массив с length > 0, даже с пропусками, не считается пустым по этой политике.