Получение длины объекта в JavaScript: методы без преобразования
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для определения числа свойств в объекте можно использовать выражение Object.keys(obj).length
, которое возвращает количество перечисляемых свойств объекта obj
:
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj).length); // выводит: 3
Метод Object.keys()
генерирует массив, ключами которого являются свойства объекта, и свойство length
этого массива указывает на их количество.
Записка к коду
Рассмотрим подробнее некоторые моменты и альтернативные способы подсчета свойств в объектах:
Учитываем только собственные свойства
Если вы используете цикл for-in для подсчета свойств, обязательно проверяйте наличие свойства с помощью метода .hasOwnProperty
, чтобы исключить унаследованные свойства:
let count = 0;
for (let prop in obj) {
if (obj.hasOwnProperty(prop))
count++;
}
Если Object.keys не подойдет
Object.keys()
не работает в устаревших браузерах, например, в IE8 и более старых версиях. В таких ситуациях можем использовать альтернативное решение:
let count = 0;
for (let prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop))
count++;
}
Учитываем также неперечислимые свойства
Чтобы учитывать все свойства объекта, включая неперечислимые, примените Object.getOwnPropertyNames(obj).length
:
Object.getOwnPropertyNames(obj).length;
Визуализация
Представьте, что каждое свойство объекта – это вид рыбы 🐟 в аквариуме (объекте):
Aquarium: {
"Золотая рыба": 🐠,
"Скалярия": 🐠,
"Гуппи": 🐠
}
Подсчитывая рыбок, мы узнаем общее количество видов рыб в аквариуме (3 вида):
let fishCount = Object.keys(Aquarium).length;
// Вывод: "В аквариуме 3 вида рыбы".
Альтернативный подход: использование jQuery и underscore.js
Если в вашем проекте применяются библиотеки jQuery или underscore.js, с их помощью вы также можете определить длину объекта:
let length = $.map(obj, () => {}).length; // с использованием jQuery
let size = _.size(obj); // с использованием underscore.js
Вопросы производительности
Применение Object.keys(obj).length
приводит к созданию нового массива ключей, что может оказаться неэффективным при работе с большими объектами. В таких случаях рекомендуется искать пути улучшения производительности для обработки объектов больших размеров или при частых операциях подсчета свойств.
Полезные материалы
- Object.keys() – MDN – подробнее о том, как получить ключи объекта и их количество.
- Length of a JavaScript object – Stack Overflow – обсуждение методов подсчета размера объекта.
- Object.entries() – JavaScript | MDN – другой метод для получения свойств объекта.
- Object.getOwnPropertyNames() – JavaScript | MDN – как учесть неперечислимые свойства при подсчете.
- Object.keys, values, entries – JavaScript.info – для глубокого понимания процесса перебора свойств объекта.
- How to get the size of a JavaScript object? – Stack Overflow – другие подходы к измерению размера объектов.
- Iterating over object in JavaScript | Zell Liew – различные методы перебора свойств объектов.