दिलचस्प पोस्ट
स्ट्रिंग से अंतिम वर्ण निकालें रूबी में हैश कुंजी के रूप में प्रतीक का उपयोग क्यों करें? जावा 8 इंटरफ़ेस विधियों में "अंतिम" की अनुमति क्यों नहीं है? क्या खिड़कियों में खुली फ़ाइलों की संख्या पर कोई सीमा है? Play2 में हर जगह पैरामीटर से गुजरने से कैसे बचें? तारीख के बीच mysql क्वेरी का चयन करें? CUDA में, स्मृति कोयलािंग क्या है, और यह कैसे हासिल किया जाता है? java.util.zip – डायरेक्टरी संरचना का पुन: निर्माण करना क्यों jquery .ajax () विधि मेरी सत्र कुकी नहीं भेज रहा है? PowerShell में उपयोगकर्ता इनपुट के लिए संकेत हेडर का उपयोग करके php के साथ फ़ाइल डाउनलोड करने के लिए बाध्य करें () tellg () फ़ंक्शन फ़ाइल का गलत आकार दे? सी ++ में जिप (लॉक) कंटेनर को बढ़ावा देने या एसटीएल का उपयोग करके छंटनी for..in और hasOwnProperty Android स्टूडियो प्रोजेक्ट के लिए मेरे .gitignore में क्या होना चाहिए?

एक हैश की चाबी कैसे पाएं?

मुझे जावास्क्रिप्ट ऑब्जेक्ट्स में हैश के रूप में दोगुना है लेकिन मैं चाबियाँ प्राप्त करने के लिए एक फ़ंक्शन निर्मित नहीं कर पाया है

var h = {a:'b',c:'d'}; 

मुझे कुछ पसंद है

 var k = h.keys() ; // k = ['a','c']; 

आइटम को पुनरावृत्त करने के लिए अपने आप को एक समारोह लिखना आसान है और मैं वापस आने वाली सरणी में चाबियाँ जोड़ूं, लेकिन ऐसा करने के लिए एक मानक क्लीनर तरीका है?

मुझे लग रहा है कि यह एक साधारण समारोह में निर्मित होना चाहिए जिसे मुझे याद है लेकिन मुझे यह नहीं मिल रहा है!

वेब के समाधान से एकत्रित समाधान "एक हैश की चाबी कैसे पाएं?"

इस ऑपरेशन के लिए Object.keys आधुनिक जावास्क्रिप्ट (ECMAScript 5) में Object.keys :

 var obj = { "a" : 1, "b" : 2, "c" : 3}; alert(Object.keys(obj)); // will output ["a", "b", "c"] 

संगतता विवरण यहां पाये जा सकते हैं ।

मोज़िला साइट पर पिछड़े संगतता के लिए एक स्नैप भी है:

 if(!Object.keys) Object.keys = function(o){ if (o !== Object(o)) throw new TypeError('Object.keys called on non-object'); var ret=[],p; for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.push(p); return ret; } 

उत्पादन कोड के लिए क्लाइंट ब्राउज़रों के साथ बड़ी संगतता की आवश्यकता होती है, मैं अभी भी पुराने ब्राउज़र में Object.keysObject.keys को सुनिश्चित करने के लिए शिम के साथ इवान नेवोस्ट्रायव के उत्तर का सुझाव देता हूं। हालांकि, ECMA के नए defineProperty सुविधा का उपयोग करने के लिए सटीक कार्यक्षमता प्राप्त करना संभव है।

ईसीएमएस्क्रिप्ट 5 के रूप में – ऑब्जेक्ट। डिफीनप्रॉपर्टी

ECMA5 के रूप में आप ऑब्जेक्ट का उपयोग कर सकते हैं। Object.defineProperty() गैर-गणना योग्य गुणों को परिभाषित करने के लिए वर्तमान संगतता अभी भी वांछित होने के लिए बहुत कुछ है, लेकिन यह अंततः सभी ब्राउज़रों में प्रयोग करने योग्य होना चाहिए। (विशेष रूप से IE8 के साथ वर्तमान असंगतता पर ध्यान दें!)

 Object.defineProperty(Object.prototype, 'keys', { value: function keys() { var keys = []; for(var i in this) if (this.hasOwnProperty(i)) { keys.push(i); } return keys; }, enumerable: false }); var o = { 'a': 1, 'b': 2 } for (var k in o) { console.log(k, o[k]) } console.log(o.keys()) # OUTPUT # > a 1 # > b 2 # > ["a", "b"] 

हालांकि, जब से ECMA5 पहले ही ऑब्जेक्ट जोड़ा गया है। Object.keys आपको अच्छी तरह से उपयोग कर सकते हैं:

 Object.defineProperty(Object.prototype, 'keys', { value: function keys() { return Object.keys(this); }, enumerable: false }); 

मूल उत्तर

 Object.prototype.keys = function () { var keys = []; for(var i in this) if (this.hasOwnProperty(i)) { keys.push(i); } return keys; } 

संपादित करें: चूंकि यह उत्तर थोड़ी देर के लिए रहा है इसलिए मैं उपरोक्त अछूता छोड़ दूँगा। इसे पढ़ने वाले किसी भी व्यक्ति को नीचे इवान नेवोस्ट्रायव के उत्तर भी पढ़ना चाहिए।

प्रोटोटाइप कार्यों को गैर-गणना योग्य बनाने का कोई तरीका नहीं है, जो उनको हमेशा के लिए लूप में बदलते हैं जो कि हैओवनप्रोपर्टी का उपयोग नहीं करते हैं। मुझे अभी भी लगता है कि यह जवाब आदर्श होगा यदि वस्तु का प्रोटोटाइप विस्तार करना इतना गन्दा नहीं था।

आप Object.keys का उपयोग कर सकते हैं

 Object.keys(h) 

आप Underscore.js का उपयोग कर सकते हैं, जो एक जावास्क्रिप्ट उपयोगिता पुस्तकालय है।

 _.keys({one : 1, two : 2, three : 3}); // => ["one", "two", "three"] 

जहाँ तक मुझे पता है, यह सबसे अच्छा आप कर सकते हैं …

 var keys = []; for (var k in h)keys.push(k); 

jquery का उपयोग कर आप इस तरह की चाबियाँ पा सकते हैं …

 var bobject = {primary:"red",bg:"maroon",hilite:"green"}; var keys = []; $.each(bobject, function(key,val){ keys.push(key); }); console.log(keys); // ["primary", "bg", "hilite"] 

या –

 var bobject = {primary:"red",bg:"maroon",hilite:"green"}; $.map(bobject, function(v,k){return k;}); 

@ पिंपलोटक के लिए धन्यवाद

मेरा मानना ​​है कि आप वस्तु के गुणों के माध्यम से / में उपयोग करके लूप कर सकते हैं, ताकि आप ऐसा कुछ कर सकें:

 function getKeys(h) { Array keys = new Array(); for (var key in h) keys.push(key); return keys; } 

मैं उपरोक्त शीर्ष रेटेड उत्तर का उपयोग करना चाहता हूं

 Object.prototype.keys = function () ... 

हालांकि Google मानचित्र एपीआई v3 के साथ संयोजन में प्रयोग करते समय, Google नक्शे गैर-कार्यात्मक है।

 for (var key in h) ... 

अच्छा काम करता है।

अगर आप केवल तत्वों को पाने की कोशिश कर रहे हैं लेकिन फ़ंक्शन नहीं तो यह कोड आपकी सहायता कर सकता है

 this.getKeys = function() { var keys = new Array(); for(var key in this) { if( typeof this[key] !== 'function') { keys.push(key); } } return keys; 

}

यह हैशमैप के मेरे कार्यान्वयन का एक हिस्सा है और मैं केवल चाबियाँ चाहता हूं, "यह" हैशप ऑब्जेक्ट है जिसमें कुंजी