1. JavaScript Iterator kya hota hai ?
JavaScript me iterator ek aisa object hota hai jo kisi collection (jaise array, set, ya string) ke elements ko ek ek karke access karne ka method provide karta hai. Iterator ka main purpose sequential access dena hota hai bina collection ke structure ko expose kiye.
Jab hum kisi iterator ka .next()
method call karte hain, to yeh ek object return karta hai jisme do properties hoti hain – value (current element) aur done (boolean jo batata hai ki iteration complete hua ya nahi).
Iterators ko custom bhi banaya ja sakta hai using [Symbol.iterator]
method. JavaScript ke built-in objects jaise arrays aur strings already iterable hote hain. Iterators mainly for...of
loops ke sath use hote hain jo values ko directly iterate karne me help karte hain bina index ka use kiye.
Iterator Object ke 2 main points:
next()
method hoti hai.next()
method ek object return karti hai jisme do properties hoti hain:- value: current value
- done: boolean (true ya false) — batata hai ki iteration khatam hua ya nahi.
Example:
let numbers = [10, 20, 30];
let iterator = numbers[Symbol.iterator]();
console.log(iterator.next()); // { value: 10, done: false }
console.log(iterator.next()); // { value: 20, done: false }
console.log(iterator.next()); // { value: 30, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
Explanation:
numbers[Symbol.iterator]()
ek built-in method hai jo array ke liye iterator object return karta hai.iterator.next()
har baar call karne par ek ek item return karta hai jab tak array khatam na ho.- Jab sab elements iterate ho jaate hain,
done: true
return hota hai.
Custom Iterator Kaise Banayein ?
Custom iterator JavaScript mein ek aisa object hota hai jo khud ka iteration logic define karta hai. Ismein ek next() method hota hai jo har call par next value return karta hai aur batata hai ki iteration khatam hua ya nahi. Ye especially tab useful hota hai jab aapko kisi non-standard data structure par loop lagana ho.
function customIterator(values) {
let index = 0;
return {
next: function () {
if (index < values.length) {
return { value: values[index++], done: false };
} else {
return { value: undefined, done: true };
}
}
};
}
let it = customIterator(['apple', 'banana', 'cherry']);
console.log(it.next()); // { value: 'apple', done: false }
console.log(it.next()); // { value: 'banana', done: false }
console.log(it.next()); // { value: 'cherry', done: false }
console.log(it.next()); // { value: undefined, done: true }
Explanation:
- Humne ek custom iterator function banaya.
- Har baar
next()
call hone par ek item return ho raha hai. - Jab sab items khatam ho jaate hain,
done: true
return ho jaata hai.
Iterators vs for…of Loop:
let fruits = ['mango', 'grapes', 'orange'];
for (let fruit of fruits) {
console.log(fruit);
}
Yahaan for...of
loop bhi iterator ka use karta hai internally. Ye loop automatically .next()
method ko call karta hai background mein.
Real-Life Use Case Examples:
- Streaming data – data ko ek ek chunk mein process karna.
- Lazy Evaluation – data tabhi load karo jab zarurat ho.
- Generators ke saath use – jo iterators return karte hain.
2. JavaScript Generator kya hota hai ?
JavaScript Generators ek special type ka function hota hai jo execution ko pause aur resume karne ki ability deta hai. Ye functions function* keyword se declare kiye jaate hain aur yield keyword ka use karke values ko ek-ek karke return karte hain. Jab bhi generator function call hota hai, vo ek iterator object return karta hai jisme .next() method hoti hai. Har .next() call par generator function yield tak execute hota hai aur fir wahan ruk jaata hai, jab tak next call nahi hoti. Ye lazy evaluation ke concept par kaam karta hai, jisse memory efficient code likhna possible hota hai. Generators asynchronous operations ke liye bhi useful hote hain, jaise data streams ya APIs se data fetch karna. Ye complex logic ko manageable parts mein todne mein madad karte hain.
Syntax:
function* generatorFunction() {
yield 'Hello';
yield 'World';
}
Features of Generator:
yield
ke baad execution pause kar deta hai.next()
call karne par resume hota hai.- value and done properties return karta hai.
- Asynchronous programming mein bahut useful hota hai.
Generator Function ka Example:
function* fruitGenerator() {
yield ' Apple';
yield ' Banana';
yield ' Grapes';
}
const fruits = fruitGenerator();
console.log(fruits.next()); // { value: ' Apple', done: false }
console.log(fruits.next()); // { value: ' Banana', done: false }
console.log(fruits.next()); // { value: ' Grapes', done: false }
console.log(fruits.next()); // { value: undefined, done: true }
Iterator vs Generator – Difference :
Feature | Iterator | Generator |
---|---|---|
Creation | Manually create karna padta hai | Easily ban jaata hai function* se |
Syntax | Normal object with next() |
function* aur yield use hota hai |
Simplicity | Code lamba aur complex ho sakta hai | Code short aur readable hota hai |
Pause & Resume | Nahi kar sakte | Yes, yield se pause ho sakta hai |
Use Cases of Generator (Kab use karein?):
- Lazy Evaluation – tab jab aapko sabhi values ek saath nahi chahiyein.
- Infinite Sequences – jaise infinite numbers ya data stream.
- Custom Iteration Logic – jab aapko control chahiye value generate karne par.
- Asynchronous code – like Redux-Saga or async generators.
Quiz: Test Your Knowledge on JavaScript Generators & Iterators
Bonus: Practical Application!
Aaj hi JavaScript Generators & Iterators ka use karke apne code ko aur efficient banayein!
JavaScript Generators & Iterators ko sahi tareeke se samajhne ke liye function*
, yield
, next()
jaise keywords ka upayog karein. Ye asynchronous programming aur lazy evaluation jaise advanced concepts ko samajhne ke liye bahut important hote hain. Inka use karke aap complex data flows ko simple aur manageable bana sakte hain.