यह इन उत्तरों में दिलचस्प लोगों दोनों को छुआ दिया है Object.keys()
और for...of
लेकिन उन्हें संयुक्त कभी नहीं:
var map = {well:'hello', there:'!'};
for (let key of Object.keys(map))
console.log(key + ':' + map[key]);
आप न सिर्फ कर सकते हैं for...of
एक Object
है क्योंकि यह एक इटरेटर नहीं है, और for...index
या .forEach()
ing Object.keys()
बदसूरत / अक्षम है।
मुझे खुशी है कि अधिकांश लोग for...in
(जाँच के साथ या बिना .hasOwnProperty()
) से परहेज कर रहे हैं क्योंकि यह भी थोड़ा गड़बड़ है, इसलिए मेरे उत्तर के अलावा, मैं यहाँ कहने के लिए हूँ ...
आप साधारण वस्तु संघों को पुनरावृति बना सकते हैं! Map
for...of
Chrome और FF में काम करने वाले फैंसी
DEMO के प्रत्यक्ष उपयोग के साथ ही व्यवहार करना (मुझे ES6 ही लगता है)
var ordinaryObject = {well:'hello', there:'!'};
for (let pair of ordinaryObject)
//key:value
console.log(pair[0] + ':' + pair[1]);
//or
for (let [key, value] of ordinaryObject)
console.log(key + ':' + value);
जब तक आप नीचे मेरे शिम को शामिल करते हैं:
//makes all objects iterable just like Maps!!! YAY
//iterates over Object.keys() (which already ignores prototype chain for us)
Object.prototype[Symbol.iterator] = function() {
var keys = Object.keys(this)[Symbol.iterator]();
var obj = this;
var output;
return {next:function() {
if (!(output = keys.next()).done)
output.value = [output.value, obj[output.value]];
return output;
}};
};
एक वास्तविक मैप ऑब्जेक्ट बनाने के लिए बिना अच्छा सिन्सेटिक चीनी नहीं है।
var trueMap = new Map([['well', 'hello'], ['there', '!']]);
for (let pair of trueMap)
console.log(pair[0] + ':' + pair[1]);
वास्तव में, इस शिम के साथ, यदि आप अभी भी मैप की अन्य कार्यक्षमता (उन सभी को चमकाए बिना) का लाभ उठाना चाहते थे, लेकिन फिर भी साफ-सुथरी वस्तु संकेतन का उपयोग करना चाहते थे, क्योंकि वस्तुएं अब पुनरावृत्त हैं, तो अब आप इससे केवल एक नक्शा बना सकते हैं!
//shown in demo
var realMap = new Map({well:'hello', there:'!'});
उन लोगों के लिए जो शिम करना पसंद नहीं करते हैं, या prototype
सामान्य रूप से गड़बड़ करते हैं , बेझिझक इसके बजाय खिड़की पर कार्य करना पसंद करते हैं, इसे getObjIterator()
तब कुछ कहते हैं ;
//no prototype manipulation
function getObjIterator(obj) {
//create a dummy object instead of adding functionality to all objects
var iterator = new Object();
//give it what the shim does but as its own local property
iterator[Symbol.iterator] = function() {
var keys = Object.keys(obj)[Symbol.iterator]();
var output;
return {next:function() {
if (!(output = keys.next()).done)
output.value = [output.value, obj[output.value]];
return output;
}};
};
return iterator;
}
अब आप इसे केवल एक साधारण कार्य कह सकते हैं, बाकी कुछ भी प्रभावित नहीं है
var realMap = new Map(getObjIterator({well:'hello', there:'!'}))
या
for (let pair of getObjIterator(ordinaryObject))
वहाँ कोई कारण नहीं है कि क्यों काम नहीं करेगा।
आने वाला कल आपका स्वागत करता है।