जावास्क्रिप्ट Iterables
चलने योग्य वस्तुएं ऐसी वस्तुएं हैं जिन्हें के साथ पुनरावृत्त किया जा सकता है for..of
।
Symbol.iterator
तकनीकी रूप से, पुनरावृत्तियों को विधि को लागू करना चाहिए ।
एक स्ट्रिंग पर पुनरावृति
आप for..of
एक स्ट्रिंग के तत्वों पर पुनरावृति करने के लिए लूप का उपयोग कर सकते हैं:
उदाहरण
for (const x of "W3Schools") {
// code block to be executed
}
एक सरणी पर पुनरावृति
आप for..of
एक ऐरे के तत्वों पर पुनरावृति करने के लिए एक लूप का उपयोग कर सकते हैं:
उदाहरण
for (const x of [1,2,3,4,5] {
// code block to be executed
}
जावास्क्रिप्ट इटरेटर्स
इटरेटर प्रोटोकॉल परिभाषित करता है कि किसी वस्तु से मूल्यों का अनुक्रम कैसे उत्पन्न किया जाए ।
जब कोई वस्तु किसी विधि को लागू करती है तो वह एक पुनरावर्तक बन जाती है।next()
next()
विधि को एक वस्तु को दो गुणों के साथ वापस करना होगा
:
- मान (अगला मान)
- किया (सच या गलत)
मूल्य | इटरेटर द्वारा लौटाया गया मान (यदि किया गया सत्य है तो छोड़ा जा सकता है) |
---|---|
किया हुआ |
सच है अगर इटरेटर ने झूठा पूरा कर लिया है तो इटरेटर ने एक नया मान उत्पन्न किया है |
घर का बना चलने योग्य
यह चलने योग्य रिटर्न कभी समाप्त नहीं होता: 10,20,30,40,.... हर
next()
समय कहा जाता है:
उदाहरण
// Home Made Iterable
function myNumbers() {
let n = 0;
return {
next: function() {
n += 10;
return {value:n, done:false};
}
};
}
// Create Iterable
const n = myNumbers();
n.next(); // Returns 10
n.next(); // Returns 20
n.next(); // Returns 30
एक घर के साथ समस्या को चलने योग्य बना दिया:
यह जावास्क्रिप्ट for..of
कथन का समर्थन नहीं करता है।
एक जावास्क्रिप्ट पुनरावर्तनीय एक वस्तु है जिसमें एक Symbol.iterator है ।
Symbol.iterator
एक फ़ंक्शन है जो एक फ़ंक्शन देता है next()
।
कोड के साथ एक पुनरावृत्त को पुनरावृत्त किया जा सकता है:for (const x of iterable) { }
उदाहरण
// Create an Object
myNumbers = {};
// Make it Iterable
myNumbers[Symbol.iterator] = function() {
let n = 0;
done = false;
return {
next() {
n += 10;
if (n == 100) {done = true}
return {value:n, done:done};
}
};
}
अब आप उपयोग कर सकते हैंfor..of
for (const num of myNumbers) {
// Any Code Here
}
Symbol.iterator विधि स्वचालित रूप से द्वारा कॉल की जाती है for..of
।
लेकिन हम इसे "मैन्युअल रूप से" भी कर सकते हैं:
उदाहरण
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}