খালি জাভাস্ক্রিপ্ট অবজেক্টের জন্য আমি কীভাবে পরীক্ষা করব?


3102

একটি এজেএক্স অনুরোধের পরে, কখনও কখনও আমার অ্যাপ্লিকেশন কোনও খালি বস্তু ফিরে আসতে পারে, যেমন:

var a = {};

আমি কীভাবে তা পরীক্ষা করতে পারি?


7
আপনি কি JSON.js স্ক্রিপ্ট ব্যবহার করেন? বা অন্য কোনও জেএসওএন লাইব্রেরি। তারপরে আপনি JSON.encode () ফাংশনটি var স্ট্রিংয়ে রূপান্তর করতে এবং তারপরে এটি পরীক্ষা করতে পারেন।
থিভিজ

if( Object.entries(a).length > 0){ //do }
মুহাম্মদ শাহজাদ

উত্তর:


5410

ইসিএমএ 5+ :

// 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,

Hoek.deepEqual({}, {}); // true

ExtJS

Ext.Object.isEmpty({}); // true

AngularJS (সংস্করণ 1)

angular.equals({}, {}); // true

Ramda

R.isEmpty({}); // true

22
এখানে jQuery এবং আন্ডারস্কোর jsperf.com/isempty-vs-isemptyobject/6
মিখাইল

20
Object.keys(new Date()).length === 0; সুতরাং এই উত্তর বিভ্রান্তিকর হতে পারে।
সিজেবার্থ

6
জিনিসগুলিকে পরিবর্তিত করার পরিবর্তে আপনি এই সত্যটিরও সুবিধা নিতে পারেন: (new Date()).constructor === Dateবা বিপরীতভাবে ({}).constructor === Object,।
জন নেলসন

2
কৌণিক.এক্কালস ({}, {});
জেরেমি এ পশ্চিম

11
Object.keys()অগণিত গুণাবলী বা চিহ্নগুলি পরীক্ষা করে না। আপনি ব্যবহার করতে হবে Object.getOwnPropertyNames()এবং Object.getOwnPropertySymbols()পরিবর্তে। এছাড়াও, Object.getPrototypeOf()কোনও সামগ্রীর প্রোটোটাইপ পাওয়ার সঠিক উপায়। obj.constructorসহজে নকল হতে পারে। উদাহরণ: function Foo() {} Foo.prototype.constructor = Object; (new Foo()).constructor === Object // true
জেসি

861

এটি করার সহজ কোনও উপায় নেই। আপনাকে স্পষ্টভাবে বৈশিষ্ট্যগুলি লুপ করতে হবে:

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;
}

56
এটি সূক্ষ্মভাবে কাজ করে বা আরও সহজভাবে: ফাংশনটি ইম্পটি (অবজেক্ট) {এর জন্য (ভেরি আই অবজেক্টে) {সত্য প্রত্যাবর্তন; false মিথ্যা প্রত্যাবর্তন; }
নিকোলাস ক্রেইডবার্গ

36
সত্য এবং মিথ্যা এই ফাংশনে বিপরীত করা উচিত?
নামট্যাক্স

25
@ নামট্যাক্স: না - ফাংশনটির নাম দেওয়া হয়েছে isEmpty(), সুতরাং এটির falseকোনও সম্পত্তি থাকলে ফিরে আসা উচিত
ক্রিস্টোফ

6
খালি অবজেক্টটি ডিফল্ট অবজেক্ট শ্রেণিকে প্রসারিত করবে তবে যদি অবজেক্ট প্রোটোটাইপটি পরিবর্তন করা হয় তবে আপনার সরলীকৃত ফাংশনটি ব্যর্থ হবে: বিবেচনা করুন: অবজেক্ট.প্রোটোটাইপ.এ = 'হাই'; var obj = {}; সতর্কতা (obj.a); // আউটপুটস "হাই" ইস্পটি (আপত্তি) // প্রত্যাবর্তন করেছে
ভেরিমাস

29
এটি ও (এন) সময় জটিলতা এবং ও (এন) স্থান জটিলতার কারণে আপনার দ্বিতীয় উদাহরণটি ব্যবহার করা উচিত নয়, যদিও প্রথমটি হ'ল (1)।
ব্রায়ান

571

আপনারা যাদের ক্ষেত্রে একই সমস্যা রয়েছে তবে jQuery ব্যবহার করেন আপনি jQuery.isEmptyObject ব্যবহার করতে পারেন ।


43
Hey! আমি কেবল IE 8 ইস্যুগুলি ডিবাগ করার জন্য কয়েক ঘন্টা ব্যয় করেছি কেবল এটি jQuery.isEmptyObject যা সমস্যার সৃষ্টি করছিল তা খুঁজে পেতে। বস্তুটি খালি থাকলে এটি সত্য হয় returns
এমএফডি 3000

162
আপনি যদি jQuery সহ উত্তর পোস্ট করেন তবে যদি প্রশ্নটি jQuery সম্পর্কিত নয় তবে কেন?
এরু

47
আমি এটির একটি পুরানো মন্তব্য জানি, তবে আমি আপনার প্রশ্নটি @ এমএফডি 3000 অবাক করে দিয়েছি, কারণ নথিটি বলেছে: সত্যটি প্রত্যাবর্তন করে, যদি বস্তুটি খালি থাকে (নামটি ইঙ্গিত করে)
Фишер

21
যেমন একটি বেসিক কাজের জন্য jQuery সহ আমি সঠিক উত্তর কল করব না। এটা সত্য যে আজকাল jQuery প্রায় সর্বব্যাপী, তবে তবুও আমাদের ভুলে যাওয়া উচিত নয় যে এটি খুব দক্ষ ভাষার মধ্যেই নির্মিত হয়েছে।
পাবলো মেসচার

53
এই মন্তব্যগুলিতে সাধারণ জেএস স্নোববারি। প্রত্যেকে জানে যে ওয়েবে জাভাস্ক্রিপ্টের বিস্তৃত অনুপাতটি jQuery তে লেখা আছে, তাই এখানে jQuery এর জন্য কোনও সমাধান সরবরাহ করা পুরোপুরি গ্রহণযোগ্য যদি এটির ইতিমধ্যে পরীক্ষার অবজেক্টগুলির জন্য অন্তর্নির্মিত পদ্ধতি থাকে। সম্ভবত এই যে হাজার হাজার বিকাশকারী সহায়তার সন্ধান করছেন তারা এই উত্তরটি সহায়ক বলে মনে করবে। কেউই বলেনি এটি করার একমাত্র উপায়। আমি খেয়াল করেছি যে কেউ যেভাবে ব্যবহারের সমাধান পোস্ট করেছে তার সম্পর্কে সমস্ত অভিজাত শ্রেণীর আচরণ কীভাবে underscore.js...
BadHorsie

276

এটি আমার পছন্দের সমাধান:

var obj = {};
return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty

1
আইই 9 বিটিডাব্লু এর সাথে সামঞ্জস্যতার সমস্যা। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

3
@ জিরো ফ্রাঞ্জানি: না তা নেই
নিকোস্কিপ

অবজেক্ট.কিজ ({})। দৈর্ঘ্য (এর জন্য ... ইন ...) বিকল্পের চেয়ে 10 গুণ কম - আমি এটি প্রস্তাব করি যে এটি কোনও পরীক্ষার উপায় হিসাবে এজেটসিটি খালি নেই avoid
দবিধাদাস

10
Object.keys(new Date()).length === 0; সুতরাং এই উত্তর বিভ্রান্তিকর হতে পারে।
সিজেবার্থ

new Date()কোন বস্তু নয়। nd = new Date(); nd.constructor === Object;ফলাফল false
পোষ্ট

204

আপনি অ্যান্ডস্কোর.জেএস ব্যবহার করতে পারেন ।

_.isEmpty({}); // true

19
অথবা আপনি লোডাশটি ফাঁকা ( ল্যাড্যাশ ডকস ডকস# আইসপিটি ) ব্যবহার করতে পারেন , তবে এটি কীভাবে কোনও jQuery সমাধান ব্যবহারের চেয়ে আলাদা - আপনার এখনও একটি অতিরিক্ত লাইব্রেরি ইনস্টল করতে হবে। আমি মনে করি একটি ভ্যানিলা জাভাস্ক্রিপ্ট সমাধান হ'ল উদ্দেশ্য।
tfmontague

10
আপনি যদি নোড.জেএস সহ ব্যাকএন্ডে জেএস ব্যবহার করতে চান তবে এটি আলাদা খুব কম লোকই ব্যাক-এন্ডে jQuery (বেশিরভাগ ডিওএম ম্যানিপুলেশনের জন্য ব্যবহৃত একটি ফ্রন্ট-এন্ড লাইব্রেরি) ব্যবহার করতে চাইবে।
নাহ্ন

3
@tfmontague আন্ডারস্কোর নোড অ্যাপ্লিকেশনগুলিতে খুব সাধারণ, জিকিউ ক্লায়েন্টের পক্ষে প্রায় সর্বব্যাপী। আমার ইতিমধ্যে আন্ডারস্কোর প্রয়োজন ছিল তবে বুঝতে পারিনি যে এটির এই ফাংশনটি রয়েছে
rw-nandemo

5
ইনডস্কোরটি লোডাসের পরিবর্তে প্রতিস্থাপিত হচ্ছে। পরিবর্তে এটি ব্যবহার করুন।
ডেমিসেক্স

2
শুধু তারিখের ধরণের বিষয়ে সাবধানতা অবলম্বন করা উচিত, ইম্পতিটি সর্বদা তারিখের জন্য সত্য হয়, দেখুন github.com/jashkenas/underscore/issues/445
মেন্টে

116
if(Object.getOwnPropertyNames(obj).length === 0){
  //is empty
}

দেখতে http://bencollier.net/2011/04/javascript-is-an-object-empty/


5
এটি যত্ন নেওয়ার ক্ষেত্রে অগণিত গুণাবলী অন্তর্ভুক্ত করে।

অবজেক্ট.জেটঅনপ্রনিরটিনেমস ({})। দৈর্ঘ্যটি (এর জন্য ... ইন ...) বিকল্পের চেয়ে 10 গুণ কম - আমি এটি পরীক্ষার উপায় হিসাবে এটি এড়াতে পরামর্শ দিচ্ছি যদি কোনও অজবেটেক খালি থাকে।
দবিধাদস

4
Object.getOwnPropertyNames(new Date()).length === 0; সুতরাং এই উত্তর বিভ্রান্তিকর হতে পারে।
সিজেবার্থ

79

JSON.stringify ব্যবহার সম্পর্কে কীভাবে? এটি প্রায় সমস্ত আধুনিক ব্রাউজারে উপলব্ধ।

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}

22
রিটার্ন (JSON.stringify (obj) == '{}')
ভিক

26
এই ধরণের ইউটিলিটির জন্য এটি ধীর এবং গতির বিষয়। এখানে দ্রুত পারফেক্ট

1
এটি একটি খুব ধীর বিকল্প - আমি পরিবর্তে (জন্য ... জন্য) বিকল্পটি ব্যবহার করার পরামর্শ দিই
দবিধাদস

2
এবং এটি ফাংশন ধারণ করে এমন বস্তুর পক্ষে কাজ করে না।
ফেলিক্স ক্লিং

1
বস্তুটিতে একটি বিজ্ঞপ্তি রেফারেন্স থাকলে এটি ত্রুটিও ছুঁড়ে দেবে। সুতরাং এটি ধীর, অবিশ্বাস্য এবং ত্রুটি ছুঁড়ে ফেলে অন্য কিছু ভেঙে ফেলতে পারে। এটি কখনও ব্যবহার করার কোনও কারণ নেই।
বুড়াক

62

আমি সবেমাত্র একই ধরণের পরিস্থিতিতে পড়লাম। আমি JQuery ব্যবহার করতে চাইনি, এবং খাঁটি জাভাস্ক্রিপ্ট ব্যবহার করে এটি করতে চেয়েছিলাম।

এবং আমি যা করেছি তা ছিল নিম্নলিখিত শর্তটি ব্যবহার করা এবং এটি আমার পক্ষে কাজ করে।

var obj = {};
if(JSON.stringify(obj) === '{}') { //This will check if the object is empty
   //Code here..
}

সমান না হওয়ার জন্য এটি ব্যবহার করুন: JSON.stringify(obj) !== '{}'

এই জেএসফিডেলটি দেখুন


4
বিজ্ঞপ্তিযুক্ত রেফারেন্স সহ বস্তুগুলির জন্য ব্যর্থ হবে কারণ JSON.stringify নির্দিষ্টভাবে তাদের জন্য একটি ব্যতিক্রম ছুঁড়ে দেয়।
পেড্রো মন্টো গার্সিয়া

1
@ পেড্রোমন্টটোগ্র্যাকিয়া ঠিক আছে এবং কীভাবে একটি ফাঁকা বস্তুর একটি বিজ্ঞপ্তি রেফারেন্স থাকবে?
KthProg

8
যদি বস্তুটি খালি না থাকে (এবং এটি তাদের জন্যও কাজ করা উচিত)।
পেড্রো মন্টো গার্সিয়া

এটি ইতিমধ্যে @ আতেজস্কি দ্বারা উল্লেখ করা হয়েছে বলে মনে হয় এবং কোনও বস্তু খালি নেই কিনা তা যাচাই করার সবচেয়ে ধীরতম উপায়।
17/09 এ cwdning

ওহ হ্যাঁ .. আমি মিস করেছি আমি এমন একটি পরিস্থিতিতে ছুঁড়েছি যেখানে আমি এই জাভাস্ক্রিপ্টটি অর্জন করতে চেয়েছিলাম এবং কিছুটা চিন্তাভাবনা করার পরে আমি এইভাবে আবিষ্কার করেছি। @ আতেসকি, যদিও আপনি যেভাবে করেছেন সেভাবেই আমি। :-) বিটিডব্লিউ, এই সম্পর্কে অনেক উত্তর ছিল, এবং তাই আমি আপনার উত্তরটি মিস করেছি।
আনিস নায়ের

60

পুরানো প্রশ্ন, কিন্তু সবেমাত্র বিষয়টি ছিল। আপনার একমাত্র উদ্দেশ্য অবজেক্টটি খালি নেই কিনা তা পরীক্ষা করা যদি জিকুয়েরি অন্তর্ভুক্ত করা সত্যিই ভাল ধারণা নয়। পরিবর্তে, কেবল জিকুয়েরির কোডের গভীরে গিয়ে আপনি উত্তরটি পাবেন:

function isEmptyObject(obj) {
    var name;
    for (name in obj) {
        if (obj.hasOwnProperty(name)) {
            return false;
        }
    }
    return true;
}

5
এটি কেবল তখনই কার্যকর যখন অন্য কোনও প্রক্রিয়া আপনার বেস অবজেক্টে প্রোটোটাইপ যোগ না করে। এটি সত্যিকারের কার্যকর করার জন্য, আপনাকে اعتراضের জন্য পরীক্ষা করা দরকার wঅনপ্রোপার্টি (নাম)
মেম্বারবার্ন

1
এই কিছু যোগ না ক্রিস্টোফ এর উত্তর 2009 থেকে
ড্যান Dascalescu

39

আপনি যদি নতুন ব্রাউজারে থাকেন তবে একটি সহজ উপায় রয়েছে। Object.keys(obj).length == 0


1
কোথায় keysসম্পত্তি থেকে এসেছে?


1
উপরের মন্তব্যটি কীভাবে 4 টি আপগেট করতে পারে? হ্যাঁ, Object.keysএকটি স্ট্যান্ডার্ড পদ্ধতি তবে অবজেক্টগুলির কীগুলির সম্পত্তি নেই। সুতরাং এই কোডটি যে কোনও বস্তুকে খালি হিসাবে রিপোর্ট করবে যদি এটি দুর্ঘটনাক্রমে কোনও মানযুক্ত একটি সম্পত্তি থাকে keyযা আবার lengthশূন্য নয় এমন সম্পত্তি হিসাবে নাম হিসাবে চিহ্নিত হয়। ভয়ঙ্কর!
স্ক্র্যাভি

Object.keys(new Date()).length === 0; সুতরাং এই উত্তর বিভ্রান্তিকর হতে পারে।
সিজেবার্থ

11
@ স্ক্র্যাভি অবজেক্ট ক্লাস অবজেক্ট। অবজেক্টের 'কী' নামে একটি স্থিতিশীল পদ্ধতি রয়েছে যা কোনও বস্তুকে আর্গুমেন্ট হিসাবে গ্রহণ করে। এই পদ্ধতিতে স্ট্রিংগুলির একটি অ্যারে প্রদান করে যেখানে স্ট্রিংগুলি সম্পত্তির নাম। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

33

অবজেক্ট.কিজ (ওজেক্ট)। দৈর্ঘ্য (ইসিএমএ 5+ এর জন্য উপরে প্রস্তাবিত হিসাবে) খালি বস্তুর জন্য 10 গুণ ধীর! পুরানো স্কুল (জন্য ... ইন) বিকল্পটি রাখুন।

নোড, ক্রোম, ফায়ারফক্স এবং আই 9 এর অধীনে পরীক্ষিত, এটি স্পষ্ট হয়ে যায় যে বেশিরভাগ ব্যবহারের ক্ষেত্রে:

  • (জন্য ... ইন ...) হ'ল ব্যবহারের জন্য দ্রুততম বিকল্প!
  • অবজেক্ট.কিজ (ওজেক্ট)। দৈর্ঘ্য ফাঁকা বস্তুর জন্য 10 গুণ ধীর
  • JSON.stringify (obj)। দৈর্ঘ্য সর্বদা সবচেয়ে ধীর ( আশ্চর্যজনক নয়)
  • Object.getOwPPerertyNames (Obj)। দৈর্ঘ্য অবজেক্ট.কিজ (ওজেক্ট) এর চেয়ে বেশি সময় নেয় some কিছু সিস্টেমে দৈর্ঘ্য আরও দীর্ঘ হতে পারে।

নীচের লাইন পারফরম্যান্স অনুযায়ী, ব্যবহার করুন:

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 বার ... অতিরিক্ত কোডের অতিরিক্ত পার্সিংয়ের সময় বিবেচনা করে কি এটি এখনও ধীর হবে?
ইয়াঙ্কি

33

কর্মক্ষমতা

আজ 2020.01.17 আমি নির্বাচিত সমাধানগুলির জন্য ক্রোম ভি7979.0, সাফারি ভি 13.0.4 এবং ফায়ারফক্স ভি 72.0-এ ম্যাকওস হাইসিয়ার 10.13.6 এ পরীক্ষা করি।

উপসংহার

  • for-in(এ, জে, এল, এম) ভিত্তিক সমাধানগুলি দ্রুততম
  • JSON.stringify(বি, কে) ভিত্তিক সমাধানগুলি ধীর are
  • আশ্চর্যজনকভাবে Object(এন) এর উপর ভিত্তি করে সমাধানটি ধীর is

এখানে চিত্র বর্ণনা লিখুন

বিস্তারিত

স্নিপেটের নীচে 15 টি সমাধান উপস্থাপন করা হয়েছে। আপনি যদি আপনার মেশিনে পারফরম্যান্স পরীক্ষা চালাতে চান তবে এখানে ক্লিক করুন

এখানে চিত্র বর্ণনা লিখুন


এর অনেক কিছুই বোঝা যায় না কারণ আপনি সবকিছুকে মিথ্যা এবং সত্যের প্রত্যাবর্তনে ভিত্তি করে চলেছেন। কখনও কখনও প্রোগ্রামিংয়ের জন্য যদি একটি বিবৃতি বা টেরিনারি অপারেটর প্রয়োজন হয়। just fyi
খ্রিস্টান ম্যাথু

এটি সর্বোত্তম উত্তর, আপনাকে ধন্যবাদ, প্রথম সমাধানটি
মনোমুগ্ধের

32

আপনি অবজেক্ট কীগুলির গণনা পরীক্ষা করতে পারেন:

if (Object.keys(a).length > 0) {
    // not empty
}

8
ইতিমধ্যে দেওয়া উত্তরের জন্য আপনি কেন একটি মন্তব্য যুক্ত করবেন এবং আরও খারাপ উত্তর দেবেন? stackoverflow.com/a/32108184/4229159 এবং এটি এপ্রিল
আলেজান্দ্রো ওয়েলস

আমার যদি খুব বড় একটি অবজেক্ট থাকে এবং প্রতিটি লুপে এটি করতে পারি তবে কেবল অবজেক্টটি খালি ছিল কিনা তা দেখার জন্য?
স্টিফানসআর্যা

27
  1. শুধু একটি workaround। আপনার সার্ভার ডেটা না থাকার ক্ষেত্রে কিছু বিশেষ সম্পত্তি তৈরি করতে পারে?

    উদাহরণ স্বরূপ:

    var a = {empty:true};

    তারপরে আপনি এটি আপনার এজেএক্স কলব্যাক কোডে সহজেই চেক করতে পারেন।

  2. এটি পরীক্ষা করার আরেকটি উপায়:

    if (a.toSource() === "({})")  // then 'a' is empty

সম্পাদনা : আপনি যদি কোনও JSON লাইব্রেরি ব্যবহার করেন (ফেই JSON.js) তবে আপনি JSON.encode () ফাংশনটি চেষ্টা করতে পারেন এবং খালি মানের স্ট্রিংয়ের বিপরীতে ফলাফলটি পরীক্ষা করতে পারেন।


6
toSource()মানসম্মত নয় এবং আইই বা অপেরাতে কাজ করে না (এবং সম্ভবত অন্যান্য ব্রাউজারগুলি আমি পরীক্ষা করি নি)
ক্রিস্টোফ

4
@ থেভিগুলি: সম্ভবত আপনার কাছে ইসিএমএ-262 এর বর্তমান সংস্করণটির আলাদা অনুলিপি রয়েছে, তবে খনি toSource15.2.4 বিভাগে কোনও সম্পত্তি তালিকাভুক্ত করে না ; এমডিসির মতে এটি জেএস 1.3 (যেমন নেটস্কেপ নেভিগেটর 4.06) এ চালু হয়েছিল, তবে এটি ইসিএমএ-262, তৃতীয় সংস্করণে নেই!
ক্রিস্টোফ

4
@ থিভিজ: ভাল, কমপক্ষে 2 জন গুরুত্বপূর্ণ ব্রাউজার বিক্রেতারা এটি প্রয়োগ করেনি, সুতরাং এটি খুব কমই একটি ডি-ফ্যাক্টো-স্ট্যান্ডার্ড, এবং এটি ইসিএমএ -262-তে না হলেও এটি সত্যিকারের নয় ...
ক্রিস্টোফ

4
এমনকি যখন এটা কাজ করে, toSource()একটি ভয়ঙ্কর উপায় এই কাজ করতে (যেমন হয় JSON.encode())। এটি খালি কিনা তা খতিয়ে দেখার জন্য আপনার সম্পূর্ণ সামগ্রীর প্রতিনিধিত্ব করে একটি স্ট্রিং তৈরি করা দরকার। জিনিসগুলিকে স্ট্রিংয়ে রূপান্তর করার ওভারহেড রয়েছে তবে তবুও যদি আপনার বস্তুর দশ মিলিয়ন বৈশিষ্ট্য থাকে তবে এটি মিলিয়ন জিনিসকে রূপান্তর করতে হবে, যখন কেবল একটিটির দিকে নজর দিলে আপনাকে জানানো হবে যে এটি খালি নয়।
জ্যাস্পার

4
@Thevs ওভারহেড বড়, যদিও তা হতে পারে (আমি না নিশ্চিত তা প্রত্যেক পরিস্থিতিতে বয়সী) মাত্রার একই আদেশ। যাইহোক, এই উত্তরের সাথে পৃথক সম্পত্তি পাওয়া মাত্রই মিথ্যা ফেরানো জড়িত যা গল্পটি এক সাথে আলাদা করে তোলে ...
জেস্পার

25

আমি অবজেক্টটি খালি কিনা তা নির্ধারণ করার জন্য একটি সম্পূর্ণ ফাংশন তৈরি করেছি।

এটি যদি সেরা পারফরম্যান্স অর্জনের জন্য সম্ভব হয় তবে 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;
    }
}

এই কোডটির গিস্টটি এখানে ।

এবং এখানে জেএসফিটাল এখানে বিক্ষোভ এবং একটি সাধারণ পরীক্ষা।

আমি আশা করি এটি কাউকে সাহায্য করবে। চিয়ার্স!


3
এটি কোনও nullবস্তুর জন্য ব্যর্থ ।

হাই @ টোরাজাবুরো! নোটিশ দেওয়ার জন্য ধন্যবাদ! আমি সঠিক বাস্তবায়ন সহ সমস্ত উত্স আপডেট করেছি।
স্লাভা ফমিন II

1
অবজেক্ট.কিজ ({})। দৈর্ঘ্য (এর জন্য ... ইন ...) বিকল্পের চেয়ে 10 গুণ কম - আমি এটি প্রস্তাব করি যে এটি কোনও পরীক্ষার উপায় হিসাবে এজেটসিটি খালি নেই avoid
দবিধাদাস

1
Object.keys(new Date()).length === 0; সুতরাং এই উত্তর বিভ্রান্তিকর হতে পারে।
সিজেবার্থ

19

আমি এটি ব্যবহার করছি।

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;
}

ওহে. আপনি যখন এই ফাংশনটি নম্বর দিয়ে পরীক্ষা করেন বা বুলেয়ান সত্য বা মিথ্যা প্রত্যাবর্তন সত্য এবং এটি সঠিক ফলাফল নয়। isObjectEmpty (সত্য)। isObjectEmpty (মিথ্যা)। isObjectEmpty (1)
ইমান

2
আমরা তথ্য খালি কিনা তা খতিয়ে দেখছি, ডাটা টাইপটি কোনও বস্তু নয়। আপনার ক্ষেত্রে এটির কোনও বস্তু কিনা তা যাচাই করার জন্য আমাদের মতো কিছু দরকার (টাইপফোন a === "অবজেক্ট") {...}
কিরণজজ

15

নিম্নলিখিত উদাহরণে জাভাস্ক্রিপ্ট অবজেক্টটি খালি থাকলে কীভাবে পরীক্ষা করতে হয় তা দেখায়, খালি যদি আমাদের কাছে এর নিজস্ব কোনও সম্পত্তি নেই।

স্ক্রিপ্ট 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


14

অনুযায়ী ES2017 উপর স্পেসিফিকেশন Object.entries () , চেক যেকোন আধুনিক ব্রাউজারে ব্যবহার সহজ

Object.entries({}).length === 0

3
সেখানে এই উপর ব্যবহার করার কোনো সুবিধা Object.keysবা Object.values?
অলঙ্কৃত

এগুলি ব্যবহার করে @fentsignal পুরোপুরি ভাল। আমি মন্তব্যগুলিতে এটি সন্ধান না করায় কেবল এন্ট্রি যুক্ত করেছি।
বিক্রান্ত

13
function isEmpty(obj) {
  for(var i in obj) { return false; }
  return true;
}

4
উদাহরণস্বরূপ, একটি জাভাস্ক্রিপ্ট লাইব্রেরি Objectপ্রোটোটাইপ চেইনের মাধ্যমে কোনও পদ্ধতিতে প্রসারিত হবে , কারণ এটি গণনাযোগ্য এবং for inবিবৃতিটি অসংখ্য গুণাবলীর মধ্য দিয়ে লুপ করবে।
viam0Zah

12

jQuery isEmptyObject()এই ক্ষেত্রে বিশেষ ফাংশন আছে :

jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false

Http://api.jquery.com/jQuery.isEmptyObject/ এ আরও পড়ুন


12

আমি এটির জন্য কমপক্ষে একটি কী আছে কিনা তা পরীক্ষা করতে যাব। এটি খালি নয় যে আমাকে বলার জন্য যথেষ্ট হবে।

typeof obj !== "undefined" && Boolean(Object.keys(obj)[0])

1
প্রথম কী যদি falseমান দেয়? ফলাফলটি falseযা ভুল তা হবে।
জিমি ওবনিও Abor

আমি তার জন্য পরীক্ষা করেছি। আপনি একটি কাজের উদাহরণ দিতে পারেন?
টিউডোর মোড়ার

1
এটি সংক্ষিপ্ত এবং সংক্ষিপ্ত, তবে অবজেক্টের সংজ্ঞা না থাকলে রানটাইম ত্রুটির ফলস্বরূপ
মৃন্ময়

11

সমস্ত লাইব্রেরিতে হুডের নীচে সমস্ত খালি চেক পদ্ধতিতে অবজেক্ট কীগুলি পরীক্ষা করার যুক্তি ব্যবহার করা হয়। এটি বোধগম্য করার একটি অদ্ভুত উপায়, যা আপনি এখানে বর্ণিত কোনও পদ্ধতিতে রাখতে পারেন ।

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

যদিও এটি যদি বিবৃতি দেওয়ার পক্ষে একটি অদ্ভুত উপায় হিসাবে সঠিক হয় - এটি সম্ভবত এমন কাউকে বিভ্রান্ত করবে যে আপনার পরে কোডটি বজায় রাখবে।
সোরেন

10


আপনি এই সহজ কোডটি ব্যবহার করতে পারেন যা 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

JSON.stringifyসমাধানটি ব্যর্থ হয় যদি অবজেক্টে অ-স্ট্রিংফিয়েবল বৈশিষ্ট্য যেমন ফাংশন বা "অপরিজ্ঞাত" থাকে তবে এটি মেনে চলতে পারে granted

10

আমি যে সেরা উপায় খুঁজে পেয়েছি:

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

3
আমি বলব যে 0 টি খালি নয় কারণ এটি আসলে একটি সংখ্যা। অন্য সব কিছুই দেখতে সুন্দর তবে ঠিক করা সহজ। প্রথম যদি বিবৃতি এটি যোগ করুন। if (!obj && obj !== 0)
mjwrazor

9

আমার গ্রহণ:

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()বর্তমানে প্রয়োগ করে ।


2
Object.keys(new Date()).length === 0; সুতরাং এই উত্তর বিভ্রান্তিকর হতে পারে।
সিজেবার্থ

3
কখনই কী উন্মোচন না করা সত্ত্বেও আপনি কোনও তারিখ সর্বদা "পূর্ণ" হিসাবে বিবেচনা করে তা নির্ভর করে। তবে আমি সম্মত হই যে এটি যদি আপনার পরিকল্পনা হয় তবে তারিখ নির্মাণকারীর জন্য কিছু পরিপূরক উদাহরণ যুক্ত করা ভাল বিকল্প।
নিকো

9

যদি jQuery এবং ওয়েব ব্রাউজারটি উপলভ্য না থাকে তবে আন্ডারস্কোর.জেএস-এ একটি ইম্পেটি ফাংশনও রয়েছে।

_.isEmpty({}) // returns true

অতিরিক্তভাবে, এটি ইনপুট প্যারামিটারকে কোনও বস্তু হিসাবে ধরে নেয় না। একটি তালিকা বা স্ট্রিং বা অপরিজ্ঞাত জন্য এটি সঠিক উত্তরটিও ঘুরিয়ে দেবে।



7

সতর্কীকরণ! জেএসএনের সীমাবদ্ধতা থেকে সাবধান থাকুন।

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 (আপত্তি)

    আয়

    {}

7

সঠিক উত্তরটি হ'ল:

const isEmptyObject = obj =>
  Object.getOwnPropertyNames(obj).length === 0 &&
  Object.getOwnPropertySymbols(obj).length === 0 &&
  Object.getPrototypeOf(obj) === Object.prototype;

এটি যাচাই করে:

  • বস্তুর নিজস্ব কোনও বৈশিষ্ট্য নেই (গণনাযোগ্যতা নির্বিশেষে)।
  • বস্তুর নিজস্ব কোনও সম্পত্তি প্রতীক নেই।
  • অবজেক্টের প্রোটোটাইপ হুবহু Object.prototype

অন্য কথায়, বস্তুটি তৈরি করা থেকে পৃথকীকরণযোগ্য {}


6

থেভসের উত্তর ছাড়াও:

var o = {};
alert($.toJSON(o)=='{}'); // true

var o = {a:1};
alert($.toJSON(o)=='{}'); // false

এটি jquery + jquery.json


আমি JSON ব্যবহার করা পছন্দ করি না কারণ এটি বৃত্তাকার অবজেক্ট স্ট্রাকচারের সাথে কাজ করতে পারে না।
itdoesntwork

2
যদি আপনার পৃষ্ঠাটি jQuery লোড করে তবে $.isEmptyObject()অ-স্পষ্ট রূপান্তরগুলির সাথে চক্রটি অপচয় করবেন না।
skierpage

6

সুগার.জেএস এই উদ্দেশ্যে বর্ধিত বস্তু সরবরাহ করে। কোডটি পরিষ্কার এবং সহজ:

একটি বর্ধিত বস্তু তৈরি করুন:

a = Object.extended({})

এটির আকারটি পরীক্ষা করুন:

a.size()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.