AJAX अनुरोध के बाद, कभी-कभी मेरा आवेदन किसी खाली वस्तु को लौटा सकता है, जैसे:
var a = {};
मैं कैसे जांच सकता हूं कि क्या मामला है?
if( Object.entries(a).length > 0){ //do }
AJAX अनुरोध के बाद, कभी-कभी मेरा आवेदन किसी खाली वस्तु को लौटा सकता है, जैसे:
var a = {};
मैं कैसे जांच सकता हूं कि क्या मामला है?
if( Object.entries(a).length > 0){ //do }
जवाबों:
ECMA 5+ :
// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object
ध्यान दें, हालांकि, यह एक अनावश्यक सरणी (वापसी मान keys
) बनाता है ।
पूर्व ECMA 5:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop)) {
return false;
}
}
return JSON.stringify(obj) === JSON.stringify({});
}
jQuery :
jQuery.isEmptyObject({}); // true
_.isEmpty({}); // true
_.isEmpty({}); // true
Hoek.deepEqual({}, {}); // true
Ext.Object.isEmpty({}); // true
angular.equals({}, {}); // true
R.isEmpty({}); // true
Object.keys(new Date()).length === 0
; तो यह उत्तर भ्रामक हो सकता है।
(new Date()).constructor === Date
या इसके विपरीत ({}).constructor === Object
।
Object.keys()
नॉन-एनेमरेबल प्रॉपर्टीज या सिंबल की जांच नहीं करता है। आपको उपयोग करने की आवश्यकता है Object.getOwnPropertyNames()
और Object.getOwnPropertySymbols()
इसके बजाय। साथ ही, Object.getPrototypeOf()
ऑब्जेक्ट का प्रोटोटाइप प्राप्त करने का सही तरीका है। obj.constructor
आसानी से जाली हो सकता है। उदाहरण: function Foo() {} Foo.prototype.constructor = Object; (new Foo()).constructor === Object // true
।
ऐसा करने का कोई आसान तरीका नहीं है। आपको संपत्तियों पर स्पष्ट रूप से लूप करना होगा:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
यदि ECMAScript 5 समर्थन उपलब्ध है, तो आप Object.keys()
इसके बजाय उपयोग कर सकते हैं :
function isEmpty(obj) {
return Object.keys(obj).length === 0;
}
isEmpty()
, इसलिए इसे वापस लौटना चाहिए false
यदि इसके पास कोई संपत्ति है
आपमें से जिन लोगों को एक ही समस्या है, लेकिन jQuery का उपयोग करते हैं, आप jQuery.isEmptyObject का उपयोग कर सकते हैं ।
underscore.js
...
यह मेरा पसंदीदा समाधान है:
var obj = {};
return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty
Object.keys(new Date()).length === 0
; तो यह उत्तर भ्रामक हो सकता है।
new Date()
कोई वस्तु नहीं है। nd = new Date(); nd.constructor === Object;
में परिणाम false
।
आप Underscore.js का उपयोग कर सकते हैं ।
_.isEmpty({}); // true
if(Object.getOwnPropertyNames(obj).length === 0){
//is empty
}
http://bencollier.net/2011/04/javascript-is-an-object-empty/ देखें
Object.getOwnPropertyNames(new Date()).length === 0
; तो यह उत्तर भ्रामक हो सकता है।
JSON.stringify का उपयोग कैसे करें? यह सभी आधुनिक ब्राउज़रों में लगभग उपलब्ध है।
function isEmptyObject(obj){
return JSON.stringify(obj) === '{}';
}
मैं बस एक समान स्थिति में भाग गया। मैं JQuery का उपयोग नहीं करना चाहता था, और शुद्ध जावास्क्रिप्ट का उपयोग करके ऐसा करना चाहता था।
और जो मैंने किया, वह निम्नलिखित शर्त का उपयोग करता था, और यह मेरे लिए काम करता था।
var obj = {};
if(JSON.stringify(obj) === '{}') { //This will check if the object is empty
//Code here..
}
उपयोग नहीं के बराबर है: JSON.stringify(obj) !== '{}'
इस JSFiddle बाहर की जाँच करें
पुराना सवाल है, लेकिन सिर्फ मुद्दा था। यदि वस्तु खाली नहीं है तो जांच करना आपका एकमात्र उद्देश्य है JQuery को शामिल करना वास्तव में एक अच्छा विचार नहीं है। इसके बजाय, सिर्फ JQuery के कोड में गहरे , और आपको जवाब मिलेगा:
function isEmptyObject(obj) {
var name;
for (name in obj) {
if (obj.hasOwnProperty(name)) {
return false;
}
}
return true;
}
यदि आप एक नए ब्राउज़र पर हैं तो एक सरल तरीका है।
Object.keys(obj).length == 0
Object.keys
एक मानक विधि है, लेकिन वस्तुओं में एक कुंजी गुण नहीं है। इसलिए यह कोड किसी भी वस्तु को खाली के रूप में रिपोर्ट करेगा, क्योंकि यह गलती से एक संपत्ति के नाम पर होता है key
जो फिर से एक संपत्ति के रूप में होता है जिसका नाम length
शून्य नहीं है। भयानक!
Object.keys(new Date()).length === 0
; तो यह उत्तर भ्रामक हो सकता है।
Object.keys (obj) .length का उपयोग करना (जैसा कि ECMA 5+ के लिए ऊपर बताया गया है) खाली वस्तुओं के लिए 10 गुना धीमा है! पुराने स्कूल (... में) विकल्प के साथ रखें।
नोड, क्रोम, फ़ायरफ़ॉक्स और IE 9 के तहत परीक्षण किया गया, यह स्पष्ट है कि अधिकांश उपयोग के मामलों के लिए:
निचला रेखा प्रदर्शन बुद्धिमान, उपयोग:
function isEmpty(obj) {
for (var x in obj) { return false; }
return true;
}
या
function isEmpty(obj) {
for (var x in obj) { if (obj.hasOwnProperty(x)) return false; }
return true;
}
विस्तृत परीक्षण परिणाम देखें और परीक्षण कोड क्या वस्तु खाली है?
Object.keys
धीमा है, लेकिन कम कोड है। एक छोटे पृष्ठ पर, जहां यह कहा जाता है ... शायद 10 बार ... क्या यह अभी भी अतिरिक्त कोड के अतिरिक्त पार्सिंग समय को देखते हुए धीमी होगी?
आज 2020.01.17 मैं क्रोम समाधानों के लिए Chrome v79.0, Safari v13.0.4 और Firefox v72.0 पर MacOs HighSierra 10.13.6 पर परीक्षण करता हूं।
निष्कर्ष
for-in
(ए, जे, एल, एम) पर आधारित समाधान सबसे तेज़ हैंJSON.stringify
(B, K) पर आधारित समाधान धीमे हैंObject
(N) पर आधारित समाधान धीमा हैनीचे स्निपेट में 15 समाधान प्रस्तुत किए गए हैं। यदि आप अपने मशीन पर प्रदर्शन परीक्षण चलाना चाहते हैं तो यहां क्लिक करें ।
आप ऑब्जेक्ट कुंजियों की गिनती के लिए जाँच कर सकते हैं:
if (Object.keys(a).length > 0) {
// not empty
}
बस एक वर्कअराउंड है। क्या आपका सर्वर बिना डेटा के मामले में कुछ विशेष संपत्ति उत्पन्न कर सकता है?
उदाहरण के लिए:
var a = {empty:true};
फिर आप इसे आसानी से अपने AJAX कॉलबैक कोड में देख सकते हैं।
इसे जांचने का दूसरा तरीका:
if (a.toSource() === "({})") // then 'a' is empty
संपादित करें : यदि आप किसी JSON लाइब्रेरी (fe JSON.js) का उपयोग करते हैं तो आप JSON.encode () फ़ंक्शन को आज़मा सकते हैं और परिणाम को रिक्त मान स्ट्रिंग के विरुद्ध परीक्षण कर सकते हैं।
toSource()
गैर-मानक है और IE या ओपेरा में काम नहीं करता है (और संभावित रूप से अन्य ब्राउज़रों की मैंने जांच नहीं की है)
toSource
खंड 15.2.4 में एक संपत्ति को सूचीबद्ध नहीं करता है ; MDC के अनुसार, इसे JS1.3 (यानी नेटस्केप नेविगेटर 4.06) में पेश किया गया था, लेकिन यह ECMA-262, 3rd संस्करण में नहीं है!
toSource()
का एक भयानक तरीका है (जैसा है JSON.encode()
)। यह खाली है अगर यह जाँच करने के लिए अपनी पूरी वस्तु का प्रतिनिधित्व करने के लिए एक स्ट्रिंग बनाने की जरूरत है। चीजों को स्ट्रिंग्स में बदलने का ओवरहेड है, लेकिन इसके अलावा अगर आपकी वस्तु में एक लाख गुण हैं, तो इसे एक लाख चीजों को बदलने की आवश्यकता होगी, जबकि वास्तव में सिर्फ एक को देखने से आपको पता चल जाएगा कि यह खाली नहीं है।
यदि ऑब्जेक्ट खाली है, तो यह निर्धारित करने के लिए मैंने एक पूर्ण फ़ंक्शन बनाया है।
यदि संभव हो तो सबसे अच्छा प्रदर्शन ( संगतता तालिका देखें ) और पुराने इंजनों (ब्राउज़रों) के लिए सबसे अधिक अनुकूल दृष्टिकोण के लिए कमियां प्राप्त करने के लिए यह ECMAScript 5 (ES5) कार्यक्षमता Object.keys
से उपयोग करता है ।
/**
* Returns true if specified object has no properties,
* false otherwise.
*
* @param {object} object
* @returns {boolean}
*/
function isObjectEmpty(object)
{
if ('object' !== typeof object) {
throw new Error('Object must be specified.');
}
if (null === object) {
return true;
}
if ('undefined' !== Object.keys) {
// Using ECMAScript 5 feature.
return (0 === Object.keys(object).length);
} else {
// Using legacy compatibility mode.
for (var key in object) {
if (object.hasOwnProperty(key)) {
return false;
}
}
return true;
}
}
यहाँ इस कोड के लिए Gist है ।
और यहाँ JSFiddle प्रदर्शन और एक सरल परीक्षण के साथ है।
मुझे उम्मीद है कि यह किसी की मदद करेगा। चीयर्स!
Object.keys(new Date()).length === 0
; तो यह उत्तर भ्रामक हो सकता है।
मैं इसका उपयोग कर रहा हूं।
function isObjectEmpty(object) {
var isEmpty = true;
for (keys in object) {
isEmpty = false;
break; // exiting since we found that the object is not empty
}
return isEmpty;
}
उदाहरण के लिए:
var myObject = {}; // Object is empty
var isEmpty = isObjectEmpty(myObject); // will return true;
// populating the object
myObject = {"name":"John Smith","Address":"Kochi, Kerala"};
// check if the object is empty
isEmpty = isObjectEmpty(myObject); // will return false;
अपडेट करें
या
आप isEmptyObject के jQuery कार्यान्वयन का उपयोग कर सकते हैं
function isEmptyObject(obj) {
var name;
for (name in obj) {
return false;
}
return true;
}
निम्न उदाहरण दिखाता है कि यदि कोई जावास्क्रिप्ट ऑब्जेक्ट खाली है, तो परीक्षण कैसे किया जाए, यदि खाली होने का मतलब है कि इसका कोई गुण नहीं है।
स्क्रिप्ट ES6 पर काम करती है।
const isEmpty = (obj) => {
if (obj === null ||
obj === undefined ||
Array.isArray(obj) ||
typeof obj !== 'object'
) {
return true;
}
return Object.getOwnPropertyNames(obj).length === 0;
};
console.clear();
console.log('-----');
console.log(isEmpty('')); // true
console.log(isEmpty(33)); // true
console.log(isEmpty([])); // true
console.log(isEmpty({})); // true
console.log(isEmpty({ length: 0, custom_property: [] })); // false
console.log('-----');
console.log(isEmpty('Hello')); // true
console.log(isEmpty([1, 2, 3])); // true
console.log(isEmpty({ test: 1 })); // false
console.log(isEmpty({ length: 3, custom_property: [1, 2, 3] })); // false
console.log('-----');
console.log(isEmpty(new Date())); // true
console.log(isEmpty(Infinity)); // true
console.log(isEmpty(null)); // true
console.log(isEmpty(undefined)); // true
Object.entries () पर ES2017 विनिर्देशन के अनुसार , चेक किसी भी आधुनिक ब्राउज़र का उपयोग करके सरल है -
Object.entries({}).length === 0
Object.keys
या Object.values
?
function isEmpty(obj) {
for(var i in obj) { return false; }
return true;
}
Object
प्रोटोटाइप श्रृंखला के माध्यम से एक विधि के साथ फैली हुई है , क्योंकि यह गणना योग्य है और यह for in
कथन असंख्य गुणों के माध्यम से लूप करता है।
jQuery isEmptyObject()
के इस मामले के लिए विशेष कार्य है :
jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false
Http://api.jquery.com/jQuery.isEmptyObject/ पर और पढ़ें
अगर यह कम से कम एक कुंजी है मैं जाँच के लिए जाना होगा। मुझे यह बताने के लिए पर्याप्त होगा कि यह खाली नहीं है।
typeof obj !== "undefined" && Boolean(Object.keys(obj)[0])
false
मूल्य? परिणाम false
गलत होगा।
हुड के तहत सभी पुस्तकालयों में सभी खाली जांच विधियों में तर्क की जाँच करने वाले ऑब्जेक्ट कीज़ का उपयोग किया जाता है। इसका एक अजीब तरीका यह समझने योग्य है, जिसे आप एक विधि में डाल सकते हैं, यहां वर्णित है ।
for(key in obj){
//your work here.
break;
}
जो ईएस 5 में विकसित हुआ है , अब बस आप ऑब्जेक्ट की कुंजियों की लंबाई की जांच कर सकते हैं, Object.Keys
विधि का उपयोग करके जो आपकी वस्तु को पैरामीटर के रूप में लेता है:
if(Object.keys(obj).length > 0){
//do your work here
}
या अगर आप लोदाश का उपयोग कर रहे हैं (तो आपको होना चाहिए) तब।
_.isEmpty(obj) //==true or false
आप इस सरल कोड का उपयोग कर सकते हैं जो उपयोग नहीं किया था jQuery या अन्य पुस्तकालयों का
var a=({});
//check is an empty object
if(JSON.stringify(a)=='{}') {
alert('it is empty');
} else {
alert('it is not empty');
}
JSON वर्ग और यह फ़ंक्शन ( पार्स और स्ट्रिंग ) बहुत उपयोगी हैं लेकिन IE7 के साथ कुछ समस्याएं हैं जो आप इसे इस सरल कोड http://www.json.org/js.html के साथ ठीक कर सकते हैं ।
अन्य सरल तरीका (सबसे सरल तरीका):
आप इस तरह से jQuery या JSON ऑब्जेक्ट का उपयोग किए बिना उपयोग कर सकते हैं ।
var a=({});
function isEmptyObject(obj) {
if(typeof obj!='object') {
//it is not object, so is not empty
return false;
} else {
var x,i=0;
for(x in obj) {
i++;
}
if(i>0) {
//this object has some properties or methods
return false;
} else {
//this object has not any property or method
return true;
}
}
}
alert(isEmptyObject(a)); //true is alerted
सबसे अच्छा तरीका जो मैंने पाया:
function isEmpty(obj)
{
if (!obj)
{
return true;
}
if (!(typeof(obj) === 'number') && !Object.keys(obj).length)
{
return true;
}
return false;
}
के लिए काम करता है:
t1: {} -> true
t2: {0:1} -: false
t3: [] -> true
t4: [2] -> false
t5: null -> true
t6: undefined -> true
t7: "" -> true
t8: "a" -> false
t9: 0 -> true
t10: 1 -> false
if (!obj && obj !== 0)
।
मेरा स्वीकार कर लेना:
function isEmpty(obj) {
return !Object.keys(obj).length > 0;
}
var a = {a:1, b:2}
var b = {}
console.log(isEmpty(a)); // false
console.log(isEmpty(b)); // true
बस, मुझे नहीं लगता कि सभी ब्राउज़र Object.keys()
वर्तमान में लागू होते हैं।
Object.keys(new Date()).length === 0
; तो यह उत्तर भ्रामक हो सकता है।
यदि jQuery और वेब ब्राउज़र उपलब्ध नहीं है, तो underscore.js में एक isEmpty फ़ंक्शन भी है।
_.isEmpty({}) // returns true
इसके अतिरिक्त, यह इनपुट पैरामीटर को ऑब्जेक्ट नहीं मानता है। किसी सूची या स्ट्रिंग या अपरिभाषित के लिए, यह सही उत्तर को भी बदल देगा।
चेतावनी! JSON की सीमाओं से सावधान रहें।
javascript:
obj={ f:function(){} };
alert( "Beware!! obj is NOT empty!\n\nobj = { f:function(){} }" +
"\n\nJSON.stringify( obj )\n\nreturns\n\n" +
JSON.stringify( obj ) );
प्रदर्शित करता है
खबरदार !! obj खाली नहीं है! obj = {f: function () {}} JSON.stringify (obj) रिटर्न {}
सही जवाब है:
const isEmptyObject = obj =>
Object.getOwnPropertyNames(obj).length === 0 &&
Object.getOwnPropertySymbols(obj).length === 0 &&
Object.getPrototypeOf(obj) === Object.prototype;
यह जाँच करता है कि:
Object.prototype
।दूसरे शब्दों में, किसी के साथ बनाई गई वस्तु से वस्तु अविभाज्य है {}
।
Thevs जवाब के अलावा:
var o = {};
alert($.toJSON(o)=='{}'); // true
var o = {a:1};
alert($.toJSON(o)=='{}'); // false
यह jquery + jquery.json है
$.isEmptyObject()
, तो उपयोग करें , गैर-स्पष्ट रूपांतरणों के साथ चक्रों को बर्बाद न करें।
Sugar.JS इस उद्देश्य के लिए विस्तारित वस्तुएं प्रदान करता है। कोड साफ और सरल है:
एक विस्तारित वस्तु बनाएं:
a = Object.extended({})
यह आकार की जाँच करें:
a.size()