স্যাম ডটনের উত্তর হিসাবে, ইসমাস্ক্রিপ্টের 5 তম সংস্করণে এই উদ্দেশ্যটির জন্য একটি নতুন পদ্ধতি চালু করা হয়েছে। Object.keys()আপনি যা চান তা করবে এবং ফায়ারফক্স 4 , ক্রোম 6, সাফারি 5 এবং আইই 9 তে সমর্থিত ।
আপনি ব্রাউজারগুলিতে খুব সহজেই পদ্ধতিটি প্রয়োগ করতে পারেন যা এটি সমর্থন করে না। যাইহোক, বাস্তবায়ন করা কিছু বাস্তবায়ন ইন্টারনেট এক্সপ্লোরারের সাথে পুরোপুরি সামঞ্জস্যপূর্ণ নয়। এখানে আরও একটি সুসংগত সমাধান:
Object.keys = Object.keys || (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !{toString:null}.propertyIsEnumerable("toString"),
DontEnums = [
'toString', 'toLocaleString', 'valueOf', 'hasOwnProperty',
'isPrototypeOf', 'propertyIsEnumerable', 'constructor'
],
DontEnumsLength = DontEnums.length;
return function (o) {
if (typeof o != "object" && typeof o != "function" || o === null)
throw new TypeError("Object.keys called on a non-object");
var result = [];
for (var name in o) {
if (hasOwnProperty.call(o, name))
result.push(name);
}
if (hasDontEnumBug) {
for (var i = 0; i < DontEnumsLength; i++) {
if (hasOwnProperty.call(o, DontEnums[i]))
result.push(DontEnums[i]);
}
}
return result;
};
})();
নোট করুন যে বর্তমানে গৃহীত উত্তরে হ্যাশঅনপ্রপার্টি () এর জন্য একটি চেক অন্তর্ভুক্ত নেই এবং প্রোটোটাইপ চেইনের মাধ্যমে উত্তরাধিকার সূত্রে প্রাপ্ত বৈশিষ্ট্যগুলি ফিরিয়ে দেবে। এটি ইন্টারনেট এক্সপ্লোরার-এর বিখ্যাত ডন্টইনাম বাগের জন্যও দায়বদ্ধ নয় যেখানে প্রোটোটাইপ চেইনে অগণিত বৈশিষ্ট্যগুলি স্থানীয়ভাবে একই নামযুক্ত সম্পত্তি তাদের ডন্টইনাম বৈশিষ্ট্যের উত্তরাধিকারী হিসাবে ঘোষিত করে।
অবজেক্ট.কিজ () প্রয়োগ করা আপনাকে আরও দৃ solution় সমাধান দেবে।
সম্পাদনা: প্রোটোটাইপের সুপরিচিত অবদানকারী কঙ্গাক্সের সাথে সাম্প্রতিক আলোচনার পরে , আমি এখানে তার Object.forIn()ফাংশনটির কোডের ভিত্তিতে ডন্টইনাম বাগের জন্য কাজটি বাস্তবায়ন করেছি ।
_.keys(myJSONObject)