স্ট্যান্ডার্ড অবজেক্ট বাস্তবায়ন ( ES5.1 অবজেক্ট অভ্যন্তরীণ বৈশিষ্ট্য এবং পদ্ধতি ) Object
এর কী / বৈশিষ্ট্যগুলির সংখ্যা ট্র্যাক করার জন্য কোনও প্রয়োজন হয় না , সুতরাং Object
এর কীগুলির উপর স্পষ্টভাবে বা স্পষ্টতই পুনরাবৃত্তি না করে কোনওটির আকার নির্ধারণ করার কোনও মানক উপায় নেই ।
সুতরাং এখানে সর্বাধিক ব্যবহৃত বিকল্পগুলি:
1. ECMAScript এর অবজেক্ট.কি ()
Object.keys(obj).length;
অস্থায়ী অ্যারে গণনা করার জন্য কীগুলির মাধ্যমে অভ্যন্তরীণভাবে পুনরাবৃত্তি করে এবং তার দৈর্ঘ্য ফেরত দিয়ে কাজ করে।
- পেশাদাররা - পাঠযোগ্য ও পরিষ্কার বাক্য গঠন। নেটিভ সমর্থন অনুপলব্ধ থাকলে শিম ছাড়া কোনও লাইব্রেরি বা কাস্টম কোডের প্রয়োজন নেই
- কনস - অ্যারের তৈরির কারণে মেমরি ওভারহেড।
২. লাইব্রেরি ভিত্তিক সমাধান
এই বিষয়ের অন্য কোথাও অনেক গ্রন্থাগার-ভিত্তিক উদাহরণগুলি তাদের লাইব্রেরির প্রসঙ্গে দরকারী আইডিয়ামগুলি oms পারফরম্যান্সের দৃষ্টিকোণ থেকে তবে, নিখুঁত নো-লাইব্রেরি কোডের সাথে তুলনা করার মতো কিছুই নেই কারণ এই সমস্ত লাইব্রেরি পদ্ধতিগুলি আসলে একটি লুপ Object.keys
বা ইএস 5 (নেটিভ বা শিমড) এনপ্যাপুলেট করে।
৩. একটি লুপের অনুকূলকরণ
ফাংশন কল ওভারহেডের কারণে এই জাতীয় ফোনের জন্য ধীরতম অংশটি সাধারণত .hasOwnProperty()
কল হয়। সুতরাং আমি যখন কোনও জেএসএন বস্তুর প্রবেশের সংখ্যাটি চাই তখন আমি কেবল .hasOwnProperty()
কলটি এড়িয়ে যাই যদি আমার জানা থাকে যে কোনও কোড করেনি বা প্রসারিত হবে না Object.prototype
।
অন্যথায়, আপনার কোড k
স্থানীয় var k
( ++count
) তৈরি করে এবং পোস্টফিক্সের পরিবর্তে উপসর্গ-ইনক্রিমেন্ট অপারেটর ( ) ব্যবহার করে খুব সামান্য অনুকূল হতে পারে ।
var count = 0;
for (var k in myobj) if (myobj.hasOwnProperty(k)) ++count;
আরেকটি ধারণা hasOwnProperty
পদ্ধতিটি ক্যাশে করার উপর নির্ভর করে :
var hasOwn = Object.prototype.hasOwnProperty;
var count = 0;
for (var k in myobj) if (hasOwn.call(myobj, k)) ++count;
এটি প্রদত্ত পরিবেশে দ্রুত হোক বা না তা বেঞ্চমার্কিংয়ের প্রশ্ন। খুব সীমিত পারফরম্যান্স লাভ যাইহোক আশা করা যায়।