একটি এজেএক্স অনুরোধের পরে, কখনও কখনও আমার অ্যাপ্লিকেশন কোনও খালি বস্তু ফিরে আসতে পারে, যেমন:
var a = {};
আমি কীভাবে তা পরীক্ষা করতে পারি?
if( Object.entries(a).length > 0){ //do }
একটি এজেএক্স অনুরোধের পরে, কখনও কখনও আমার অ্যাপ্লিকেশন কোনও খালি বস্তু ফিরে আসতে পারে, যেমন:
var a = {};
আমি কীভাবে তা পরীক্ষা করতে পারি?
if( Object.entries(a).length > 0){ //do }
উত্তর:
// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object
দ্রষ্টব্য, যদিও, এটি একটি অপ্রয়োজনীয় অ্যারে তৈরি করে (এর ফেরতের মান keys
)।
প্রাক-ইসিএমএ 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
।
আপনি অ্যান্ডস্কোর.জেএস ব্যবহার করতে পারেন ।
_.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) !== '{}'
পুরানো প্রশ্ন, কিন্তু সবেমাত্র বিষয়টি ছিল। আপনার একমাত্র উদ্দেশ্য অবজেক্টটি খালি নেই কিনা তা পরীক্ষা করা যদি জিকুয়েরি অন্তর্ভুক্ত করা সত্যিই ভাল ধারণা নয়। পরিবর্তে, কেবল জিকুয়েরির কোডের গভীরে গিয়ে আপনি উত্তরটি পাবেন:
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
; সুতরাং এই উত্তর বিভ্রান্তিকর হতে পারে।
অবজেক্ট.কিজ (ওজেক্ট)। দৈর্ঘ্য (ইসিএমএ 5+ এর জন্য উপরে প্রস্তাবিত হিসাবে) খালি বস্তুর জন্য 10 গুণ ধীর! পুরানো স্কুল (জন্য ... ইন) বিকল্পটি রাখুন।
নোড, ক্রোম, ফায়ারফক্স এবং আই 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 আমি নির্বাচিত সমাধানগুলির জন্য ক্রোম ভি7979.0, সাফারি ভি 13.0.4 এবং ফায়ারফক্স ভি 72.0-এ ম্যাকওস হাইসিয়ার 10.13.6 এ পরীক্ষা করি।
উপসংহার
for-in
(এ, জে, এল, এম) ভিত্তিক সমাধানগুলি দ্রুততমJSON.stringify
(বি, কে) ভিত্তিক সমাধানগুলি ধীর areObject
(এন) এর উপর ভিত্তি করে সমাধানটি ধীর isস্নিপেটের নীচে 15 টি সমাধান উপস্থাপন করা হয়েছে। আপনি যদি আপনার মেশিনে পারফরম্যান্স পরীক্ষা চালাতে চান তবে এখানে ক্লিক করুন ।
আপনি অবজেক্ট কীগুলির গণনা পরীক্ষা করতে পারেন:
if (Object.keys(a).length > 0) {
// not empty
}
শুধু একটি workaround। আপনার সার্ভার ডেটা না থাকার ক্ষেত্রে কিছু বিশেষ সম্পত্তি তৈরি করতে পারে?
উদাহরণ স্বরূপ:
var a = {empty:true};
তারপরে আপনি এটি আপনার এজেএক্স কলব্যাক কোডে সহজেই চেক করতে পারেন।
এটি পরীক্ষা করার আরেকটি উপায়:
if (a.toSource() === "({})") // then 'a' is empty
সম্পাদনা : আপনি যদি কোনও JSON লাইব্রেরি ব্যবহার করেন (ফেই JSON.js) তবে আপনি JSON.encode () ফাংশনটি চেষ্টা করতে পারেন এবং খালি মানের স্ট্রিংয়ের বিপরীতে ফলাফলটি পরীক্ষা করতে পারেন।
toSource()
মানসম্মত নয় এবং আইই বা অপেরাতে কাজ করে না (এবং সম্ভবত অন্যান্য ব্রাউজারগুলি আমি পরীক্ষা করি নি)
toSource
15.2.4 বিভাগে কোনও সম্পত্তি তালিকাভুক্ত করে না ; এমডিসির মতে এটি জেএস 1.3 (যেমন নেটস্কেপ নেভিগেটর 4.06) এ চালু হয়েছিল, তবে এটি ইসিএমএ-262, তৃতীয় সংস্করণে নেই!
toSource()
একটি ভয়ঙ্কর উপায় এই কাজ করতে (যেমন হয় JSON.encode()
)। এটি খালি কিনা তা খতিয়ে দেখার জন্য আপনার সম্পূর্ণ সামগ্রীর প্রতিনিধিত্ব করে একটি স্ট্রিং তৈরি করা দরকার। জিনিসগুলিকে স্ট্রিংয়ে রূপান্তর করার ওভারহেড রয়েছে তবে তবুও যদি আপনার বস্তুর দশ মিলিয়ন বৈশিষ্ট্য থাকে তবে এটি মিলিয়ন জিনিসকে রূপান্তর করতে হবে, যখন কেবল একটিটির দিকে নজর দিলে আপনাকে জানানো হবে যে এটি খালি নয়।
আমি অবজেক্টটি খালি কিনা তা নির্ধারণ করার জন্য একটি সম্পূর্ণ ফাংশন তৈরি করেছি।
এটি যদি সেরা পারফরম্যান্স অর্জনের জন্য সম্ভব হয় তবে ECMAScript 5 (ES5) কার্যকারিতা Object.keys
থেকে ব্যবহার করুন ( সামঞ্জস্যতার টেবিলটি দেখুন ) এবং পুরানো ইঞ্জিনগুলির (ব্রাউজারগুলি) সবচেয়ে উপযুক্ত compatible
/**
* 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;
}
}
এই কোডটির গিস্টটি এখানে ।
এবং এখানে জেএসফিটাল এখানে বিক্ষোভ এবং একটি সাধারণ পরীক্ষা।
আমি আশা করি এটি কাউকে সাহায্য করবে। চিয়ার্স!
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;
হালনাগাদ
অথবা
আপনি ismptyObject এর 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
অনুযায়ী ES2017 উপর স্পেসিফিকেশন Object.entries () , চেক যেকোন আধুনিক ব্রাউজারে ব্যবহার সহজ
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
আমি এটির জন্য কমপক্ষে একটি কী আছে কিনা তা পরীক্ষা করতে যাব। এটি খালি নয় যে আমাকে বলার জন্য যথেষ্ট হবে।
typeof obj !== "undefined" && Boolean(Object.keys(obj)[0])
false
মান দেয়? ফলাফলটি false
যা ভুল তা হবে।
সমস্ত লাইব্রেরিতে হুডের নীচে সমস্ত খালি চেক পদ্ধতিতে অবজেক্ট কীগুলি পরীক্ষা করার যুক্তি ব্যবহার করা হয়। এটি বোধগম্য করার একটি অদ্ভুত উপায়, যা আপনি এখানে বর্ণিত কোনও পদ্ধতিতে রাখতে পারেন ।
for(key in obj){
//your work here.
break;
}
যা ES5 তে বিকশিত হয়েছে , এখন সহজভাবে বলতে গেলে আপনি অবজেক্টের কীগুলির দৈর্ঘ্য পরীক্ষা করতে পারেন, এমন 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 শ্রেণী এবং এটা ফাংশন ( পার্স এবং stringify ) খুব দরকারী কিন্তু সঙ্গে কিছু সমস্যা রয়েছে 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 এবং ওয়েব ব্রাউজারটি উপলভ্য না থাকে তবে আন্ডারস্কোর.জেএস-এ একটি ইম্পেটি ফাংশনও রয়েছে।
_.isEmpty({}) // returns true
অতিরিক্তভাবে, এটি ইনপুট প্যারামিটারকে কোনও বস্তু হিসাবে ধরে নেয় না। একটি তালিকা বা স্ট্রিং বা অপরিজ্ঞাত জন্য এটি সঠিক উত্তরটিও ঘুরিয়ে দেবে।
সতর্কীকরণ! জেএসএনের সীমাবদ্ধতা থেকে সাবধান থাকুন।
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 ) );
প্রদর্শন
সাবধান !! আপত্তি খালি নেই! আপত্তি = {চ: ফাংশন () {}} JSON.stringify (আপত্তি) আয় {}
সঠিক উত্তরটি হ'ল:
const isEmptyObject = obj =>
Object.getOwnPropertyNames(obj).length === 0 &&
Object.getOwnPropertySymbols(obj).length === 0 &&
Object.getPrototypeOf(obj) === Object.prototype;
এটি যাচাই করে:
Object.prototype
।অন্য কথায়, বস্তুটি তৈরি করা থেকে পৃথকীকরণযোগ্য {}
।
থেভসের উত্তর ছাড়াও:
var o = {};
alert($.toJSON(o)=='{}'); // true
var o = {a:1};
alert($.toJSON(o)=='{}'); // false
এটি jquery + jquery.json
$.isEmptyObject()
অ-স্পষ্ট রূপান্তরগুলির সাথে চক্রটি অপচয় করবেন না।
সুগার.জেএস এই উদ্দেশ্যে বর্ধিত বস্তু সরবরাহ করে। কোডটি পরিষ্কার এবং সহজ:
একটি বর্ধিত বস্তু তৈরি করুন:
a = Object.extended({})
এটির আকারটি পরীক্ষা করুন:
a.size()