Javascript Practice Day 4 : Iterators,Iterables ,Generators
Iterable object will have a Symbol.iterator proto .Sets,Weak Set,Maps, Weak Maps are newly introduced Javascript Iterable datatypes ."for of" is a new for loop that can be used with the itrable datatypes .Set do not store duplicate values.
reference Site -https://www.youtube.com/watch?v=TJpkYvSREtM
let mySet = new Set([1,2,2,3,4])
console.dir(mySet);
for (let v of mySet){
console.log(v);
}
//Use of Symbol.iterator traverse through elements
let myArray=[1,2,3,4];
let iterator= myArray[Symbol.iterator]();
console.log(iterator.next()); //output {value: 1 and done :false } (value is the element present in the index and done :false,the array is not yet completed
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
let NumArray=[1,2,3,4];
console.dir(NumArray);
//non iterable object will not have a Symbol.iterator proto
let anyOtherObject={
name: "John",
age: 23,
friends :['kim','joe','jolly'],
getname : function(){
return this.name;
}
}
console.dir(anyOtherObject);
Generator
They are special type of functions that are being used to generate values to be used by iterators
The generator also hold the state of the objects .Use - thevalues are not generated on the first call , on the first iterator.next only one value is yielded and on the subsequent call .The other values are yielded , the generator fuction maintains the current state and later uses it to generate the other stated
//generator//
function *generator(){ //or function* generator()
yield 1;
yield 2;
yield 3;
yield 4;
}
//iterator created over generator
let iterator2=generator();
console.log(iterator2.next());
console.log(iterator2.next());
console.log(iterator2.next());
console.log(iterator2.next());
console.log(iterator2.next());
A more generator with infinite numbers since yeild is called only when the iterator.next is called to generate the values so the below function will not cause a stack overflow even if the loop is called infinite times
function *infiniteGenerator()
{
let i=0;
while(true)
{
yield i;
i++;
}
}
let iterator3= infiniteGenerator();
console.log(iterator3.next());
console.log(iterator3.next());
console.log(iterator3.next());
console.log(iterator3.next());
reference Site -https://www.youtube.com/watch?v=TJpkYvSREtM
let mySet = new Set([1,2,2,3,4])
console.dir(mySet);
for (let v of mySet){
console.log(v);
}
//Use of Symbol.iterator traverse through elements
let myArray=[1,2,3,4];
let iterator= myArray[Symbol.iterator]();
console.log(iterator.next()); //output {value: 1 and done :false } (value is the element present in the index and done :false,the array is not yet completed
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
let NumArray=[1,2,3,4];
console.dir(NumArray);
//non iterable object will not have a Symbol.iterator proto
let anyOtherObject={
name: "John",
age: 23,
friends :['kim','joe','jolly'],
getname : function(){
return this.name;
}
}
console.dir(anyOtherObject);
Generator
They are special type of functions that are being used to generate values to be used by iterators
The generator also hold the state of the objects .Use - thevalues are not generated on the first call , on the first iterator.next only one value is yielded and on the subsequent call .The other values are yielded , the generator fuction maintains the current state and later uses it to generate the other stated
//generator//
function *generator(){ //or function* generator()
yield 1;
yield 2;
yield 3;
yield 4;
}
//iterator created over generator
let iterator2=generator();
console.log(iterator2.next());
console.log(iterator2.next());
console.log(iterator2.next());
console.log(iterator2.next());
console.log(iterator2.next());
A more generator with infinite numbers since yeild is called only when the iterator.next is called to generate the values so the below function will not cause a stack overflow even if the loop is called infinite times
function *infiniteGenerator()
{
let i=0;
while(true)
{
yield i;
i++;
}
}
let iterator3= infiniteGenerator();
console.log(iterator3.next());
console.log(iterator3.next());
console.log(iterator3.next());
console.log(iterator3.next());
Comments
Post a Comment