как проверить что объект не пустой js
Методы объектов js: Как проверить объект Javascript на пустоту?
Проверить является ли объект пустым – одна из постоянно встречающихся задач в повседневной жизни Javascript разработчика.
Например, работая над очередной фичей в React приложении, требовалось делать активной кнопку “Подтвердить” только в том случае, когда объект const order = <> содержал свойства, то есть не был пустым.
В случае если бы переменная order содержала массив, то все было бы просто:
Рассмотрим 4 метода объектов js, которые помогут проверить объект на пустоту.
1. Object.keys()
Тоже самое можно записать так:
Далее прописываем переменную для свойства disabled нашей кнопки (делаем ее неактивной):
2. JSON.stringify()
Добавляем наше условие:
3. Цикл for..in
Данный способ интересен тем, что его поддерживают более старые версии браузеров. Ознакомиться с текущим состоянием браузерной совместимости цикла for..in можно здесь ).
4. isEmpty (метод в библиотеке Lodash)
В библиотеке Lodash есть специальный метод, который принимает на вход как массивы так и объекты:
Массив: перебирающие методы 2020 (11 примеров)
Javascript var, let и const (в чем отличие и когда использовать)?
Как мне проверить наличие пустого объекта JavaScript?
После AJAX-запроса иногда мое приложение может возвращать пустой объект, например:
Как я могу проверить, так ли это?
28 ответов
Обратите внимание, что это создает ненужный массив (возвращаемое значение keys ).
В следующем примере показано, как проверить, является ли объект JavaScript пустым, если мы подразумеваем, что под пустым у него нет собственных свойств.
Скрипт работает на ES6.
Как насчет использования JSON.stringify? Это почти доступно во всех современных браузерах.
Существует простой способ, если вы используете более новый браузер. Object.keys(obj).length == 0
Sugar.JS предоставляет расширенные объекты для этой цели. Код прост и понятен:
Сделайте расширенный объект:
Проверьте его размер:
Нет простого способа сделать это. Вы должны будете зациклить свойства явно:
Если поддержка ECMAScript 5 есть доступно, вы можете использовать Object.keys() вместо:
Если jQuery и веб-браузер недоступны, в underscore.js также есть функция isEmpty.
Кроме того, он не предполагает, что входной параметр является объектом. Для списка, или строки, или неопределенного, это также приведет к правильному ответу.
В дополнение к ответу Thevs:
Это jquery + jquery.json
Под капотом все пустые методы проверки во всех библиотеках используют логику проверки ключей объекта. Это странный способ сделать его понятным, который вы можете добавить в метод, описанный здесь.
Или, если вы используете Lodash (вы должны быть), тогда.
Для тех из вас, кто сталкивается с той же проблемой, но использует jQuery, вы можете использовать jQuery.isEmptyObject.
Лучший способ, который я нашел:
Согласно спецификации ES2017 в Object.entries () , проверка просто используя любой современный браузер
Я просто столкнулся с подобной ситуацией. Я не хотел использовать JQuery, и хотел сделать это, используя чистый Javascript.
И то, что я сделал, использовало следующее условие, и оно сработало для меня.
Производительность
Сегодня 2020.01.17 я выполняю тесты на MacO HighSierra 10.13.6 на Chrome v79.0, Safari v13.0.4 и Firefox v72.0 для выбранных решений.
Детали
Ниже во фрагменте представлены 15 решений. Если вы хотите запустить тест производительности на своем компьютере, нажмите ЗДЕСЬ.
Вы можете использовать Underscore.js.
JQuery имеет специальную функцию isEmptyObject() для этого случая:
Я бы пошел на проверку, если у него есть хотя бы один ключ. Этого было бы достаточно, чтобы сказать мне, что это не пусто.
Это мое предпочтительное решение:
Вы можете использовать этот простой код, который не использовал jQuery или другие библиотеки
Предостережение! Остерегайтесь ограничений JSON.
Я создал полную функцию, чтобы определить, является ли объект пустым.
Решение
Вот Gist для этого кода.
А вот и JSFiddle с демонстрацией и простым тестом.
Вы можете использовать реализацию jQuery isEmptyObject
Вы можете проверить количество ключей объекта:
Как проверить наличие пустого объекта JavaScript?
После запроса AJAX иногда мое приложение может возвращать пустой объект, например:
Как я могу проверить, является ли это случай?
ОТВЕТЫ
Ответ 1
Ответ 2
Там нет простого способа сделать это. Вы должны будете явно перекрыть свойства:
Если доступна поддержка ECMAScript 5, вы можете вместо этого использовать Object.keys() :
Ответ 3
Для тех из вас, кто имеет ту же проблему, но использует jQuery, вы можете использовать jQuery.isEmptyObject.
Ответ 4
Это мое предпочтительное решение:
Ответ 5
Вы можете использовать Underscore.js.
Ответ 6
Ответ 7
Как насчет использования JSON.stringify? Он доступен почти во всех современных браузерах.
Ответ 8
Ответ 9
Я столкнулся с подобной ситуацией. Я не хотел использовать JQuery и хотел сделать это, используя чистый Javascript.
И что я сделал, использовал следующее условие, и это сработало для меня.
Ответ 10
Существует простой способ, если вы находитесь в более новом браузере. Object.keys(obj).length == 0
Ответ 11
Вы можете проверить количество клавиш Object:
Ответ 12
Просто обходной путь. Может ли ваш сервер генерировать какое-то особое свойство в случае отсутствия данных?
Затем вы можете легко проверить его в коде обратного вызова AJAX.
Еще один способ проверить:
ИЗМЕНИТЬ: Если вы используете какую-либо библиотеку JSON (например, JSON.js), вы можете попробовать функцию JSON.encode() и проверить результат на пустую строку значений.
Ответ 13
Я создал полную функцию, чтобы определить, является ли объект пустым.
Он использует функциональные возможности Object.keys из ECMAScript 5 (ES5), если это возможно, для достижения максимальной производительности (см. Таблицу совместимости) и откат к наиболее совместимому подходу для более старых механизмов (браузеров).
Решение
А вот и JSFiddle с демонстрацией и простым тестом.
Надеюсь, это кому-нибудь поможет. Ура!
Ответ 14
Использование Object.keys(obj).length(как было предложено выше для ECMA 5+) в 10 раз медленнее для пустых объектов! придерживайтесь опции старой школы (для. in).
Протестировано под Node, Chrom, Firefox и IE 9, становится очевидным, что для большинства случаев использования:
Эффект нижней линии, используйте:
См. подробные результаты тестирования и тестовый код на Является ли объект пустым?
Ответ 15
Обновление
Вы можете использовать реализацию jQuery isEmptyObject
Ответ 16
В следующем примере показано, как проверить, является ли объект JavaScript пустым, если пустым мы не имеем никаких собственных свойств.
Скрипт работает на ES6.
Ответ 17
Ответ 18
Согласно спецификации ES2017 для Object.entries(), проверка проста с использованием любого современного browser—
Ответ 19
jQuery имеет специальную функцию isEmptyObject() для этого случая:
Ответ 20
Под капотом все пустые методы проверки во всех библиотеках используют логику проверки ключей объекта. Это странный способ сделать его понятным, который вы можете добавить в метод, описанный здесь.
Или, если вы используете Lodash (вы должны быть), то.
Ответ 21
Я бы пошел для проверки, если у него есть хотя бы один ключ. Этого было бы достаточно, чтобы сказать мне, что он не пустой.
Ответ 22
вы можете использовать этот простой код, который не использовал jQuery или другие библиотеки
Класс JSON и его функции (parse и stringify) очень полезны, но есть некоторые проблемы с IE7, которые вы можете исправить с помощью этого простой код http://www.json.org/js.html.
Другой простой способ (простейший способ):
вы можете использовать этот способ без использования jQuery или объекта JSON.
Ответ 23
Лучший способ, которым я нашел:
Ответ 24
Просто, я не думаю, что все браузеры реализуют Object.keys() в настоящее время.
Ответ 25
Если jQuery и веб-браузер недоступны, в underscore.js также есть функция isEmpty.
Кроме того, он не предполагает, что входным параметром является объект. Для списка или строки или undefined он также вернет правильный ответ.
Ответ 26
Протест! Остерегайтесь ограничений JSON.
Ответ 27
Как проверить объект на пустоту в JavaScript
Проверка объектов на пустоту в JavaScript в новых браузерах
Для чего необходима дополнительная проверка конструктора? В JavaScript имеется девять встроенных конструкторов.
Никогда не следует создавать объект с помощью конструктора. Это считается плохой практикой.
Решение проблемы ложных срабатываний
Это можно легко исправить, добавив проверку конструктора.
Отлично! Теперь мы получили верный ответ.
Как проверить объект на пустоту в JavaScript при других значениях
Давайте протестируем этот метод с некоторыми другими значениями.
Но с таким подходом следует быть осторожным! Такие значения вызовут ошибку.
Проверка объекта на null и undefined
Чтобы избежать ошибки TypeError можно применить дополнительную проверку.
В этом случае никаких ошибок возникать не будет.
Как проверить объект на пустоту в JavaScript для старых версий браузеров
Для поддержки старых браузеров и Internet Explorer существует два варианта на выбор: использовать нативный js или библиотеки. Простой «ванильный» способ выглядит не очень лаконичным, но работает хорошо.
Он возвращает true для объектов.
И объектам-конструкторам его тоже не обмануть.
Использование сторонних библиотек
Lodash
Underscore
jQuery
Чистый JavaScript или библиотеки
Что именно выбрать, зависит от обстоятельств. Я отдаю предпочтение «ванильному» js и стараюсь использовать его всегда. Подключение внешних библиотек не всегда оправдано и негативно сказывается на скорости загрузки сайтов и их работе. Да и изучать документацию и настраивать библиотеку для таких мелочей особого смысла тоже нет. Но если разрабатываемое приложении уже предполагает использование сторонних библиотек, то почему бы не задействовать их. В любом случае окончательный выбор того, как в JavaScript проверить объект на пустоту зависит от личных предпочтений каждого и конкретной задачи.
Как проверить пустой объект JavaScript?
после запроса AJAX иногда мое приложение может возвращать пустой объект, например:
Как я могу проверить, так ли это?
30 ответов
нет простого способа сделать это. Вам придется явно зацикливаться на свойствах:
Если поддержка ECMAScript 5 можно использовать Object.keys() вместо:
для тех из вас, кто имеет такую же проблему, но использует jQuery, вы можете использовать С помощью jQuery.isEmptyObject.
Это мое предпочтительное решение:
Как насчет использования JSON.преобразовать в строки? Это почти во всех современных браузерах.
старый вопрос, но просто была проблема. Включение JQuery не очень хорошая идея, если ваша единственная цель-проверить, не пуст ли объект. Вместо этого, просто глубоко в код JQuery, и вы получите ответ:
Я только что столкнулся с подобной ситуацией. Я не хотел использовать JQuery и хотел сделать это с помощью чистого Javascript.
и то, что я сделал, использовало следующее условие, и оно сработало для меня.
существует простой способ, если вы находитесь в новом браузере. Object.keys(obj).length == 0
Я создал полную функцию, чтобы определить, пуст ли объект.
Он использует Object.keys С ECMAScript 5 (ES5) функциональность, если это возможно для достижения наилучшей производительности (см. таблица совместимости) и обратные пути к наиболее совместимому подходу для старых двигателей (браузеров).
решение
здесь суть для этого кода.
и вот JSFiddle с демонстрацией и простой тест.
Я надеюсь, это поможет кому-то. Ура!
просто обходной путь. Может ли ваш сервер генерировать какое-то специальное свойство в случае отсутствия данных?
затем вы можете легко проверить его в своем коде обратного вызова AJAX.
другой способ проверить это:
редактировать: Если вы используете любую библиотеку JSON (f.e. JSON.js) тогда вы можете попробовать JSON.функция encode () и проверка результата на пустую строку значений.
Использование Объекта.ключи(объект).длина (как предложено выше для ECMA 5+) в 10 раз медленнее для пустых объектов! продолжайте использовать опцию old school (for. in).
протестировано под Node, Chrom, Firefox и IE 9, становится очевидным, что для большинства случаев использования:
вы можете проверить количество ключей объекта:
еще один простой, чистый способ JS:)
обновление
вы можете использовать реализацию jQuery isEmptyObject
jQuery имеют специальную функцию isEmptyObject() для этого случая:
вы можете использовать этот простой код, не использовать jQuery или других библиотеки
JSON класс и его функции (парсить и преобразовать в строки) очень полезны, но имеют некоторые проблемы с IE7 что вы можете исправить это с помощью этого простого кода http://www.json.org/js.html.
другой простой способ (самый простой способ) :
вы можете использовать этот путь без использования jQuery или JSON
лучший способ, который я нашел:
в следующем примере показано, как проверить, является ли объект JavaScript пустым, если под пустым мы подразумеваем отсутствие собственных свойств.
скрипт работает на ES6.
Если jQuery и веб-браузер недоступны, в подчеркивании также есть функция isEmpty.js.
кроме того, он не предполагает, что входной параметр является объектом. Для списка или строки или undefined он также превратит правильный ответ.
в дополнение к Thevs ответ:
это jquery + jquery.в JSON
нюанс! Остерегайтесь limitiations в JSON,.
сахар.JS предоставляет расширенные объекты для этой цели. Код чистый и простой:
сделать расширенный объекта:
проверьте его размер:
Другой альтернативой является использование есть.js (14kB) в отличие от в jQuery (32 КБ), лодашь (50kB), или подчеркивание (16.4 КБ). есть.js оказалась самой быстрой библиотекой среди вышеупомянутых библиотек, которая может использоваться для определения пустоты объекта.
очевидно, что все эти библиотеки не совсем то же самое, так что если вы нужно легко манипулировать DOM тогда в jQuery все еще может быть хорошим выбором, или если вам нужно больше, чем просто проверка типа потом лодашь или подчеркивание может быть хорошо. Что касается есть.js, вот синтаксис:
под капотом эта библиотека использует Object.getOwnPropertyNames что похоже к Object.keys но Object.getOwnPropertyNames является более тщательным, так как он вернет перечисляемые и не перечисляемые свойства, как описано здесь.
если вы не хотите вводить библиотеку (что понятно), и вы знаете, что вы проверяете только объекты (не массивы или строки), то следующая функция должна соответствовать вашим потребностям.
это только немного быстрее, чем есть.js, хотя только потому, что вы не проверяете, является ли это объект.
Я бы пошел проверить, есть ли у него хотя бы один ключ. Этого достаточно, чтобы понять, что она не пуста.