Какой самый эффективный способ получить число свойств в JavaScript объекте? Можно ли это сделать без перебора всех элементов? Сейчас я использую такой код:
let total = 0;
for (let property in data) {
if (data.hasOwnProperty(property)) {
total++;
}
}
Это работает, но кажется медленным для больших объектов. Слышал что в старых версиях Firefox было специальное свойство для подсчета, но его убрали. Есть ли более быстрые методы?
Object.keys(data).length - самый популярный способ. Работает быстрее твоего цикла и код короче. Да, тоже перебирает свойства, но оптимизировано. Кстати, зачем тебе подсчет больших объектов? Может структуру данных поменять стоит?
Object.keys(obj).length отлично работает в простых случаях. Если нужна максимальная скорость, попробуй Object.getOwnPropertyNames() - в некоторых движках она быстрее. Да, hasOwnProperty добавляет лишние проверки. Но, начистоту, избежать итерации не получится - браузер всё равно должен пройтись по свойствам. Возможно, стоит кэшировать результат или переосмыслить логику приложения?
Попробуй Object.getOwnPropertyNames(data).length - захватывает неперечислимые свойства, что часто нужно. Для скорости кэшируй результат, любой подсчет все равно проходит по объекту. Честно, разница между методами не критична, проблемы обычно в архитектуре.