Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Understanding Iterators & Iterables in JavaScript
Search
Jenn Creighton
May 17, 2019
Programming
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Understanding Iterators & Iterables in JavaScript
Jenn Creighton
May 17, 2019
More Decks by Jenn Creighton
See All by Jenn Creighton
Everything I Know About React I Learned From Twitter
jenncreighton
0
1.1k
React 16, the future & you (December 4, 2018)
jenncreighton
1
190
The how and why of flexible React components
jenncreighton
7
4.5k
The How and Why of Flexible React Components
jenncreighton
0
200
React 16, the future & you
jenncreighton
0
220
Other Decks in Programming
See All in Programming
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
560
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
190
AIエージェント時代のコードレビューを設計する
nogu66
5
910
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
310
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
770
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.8k
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
180
高専キャリア LT 発表内容
crysta1221
6
5.3k
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
120
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
120
Go 1.27 における memory allocation の高速化
andpad
0
360
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
120
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
270
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
880
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
660
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Leo the Paperboy
mayatellez
8
2.2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
390
Building the Perfect Custom Keyboard
takai
2
860
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
220
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Transcript
Understanding Iterators & Iterables in JavaScript
Hi! I’m Jenn! Senior Frontend Engineer @gurlcode @ Rent the
Runway
! @gurlcode
... Spread Operator @gurlcode
[ ] @gurlcode
[ 1, 2, 3 ] @gurlcode
...[ 1, 2, 3 ] @gurlcode
...[ 1, 2, 3 ] // 1, 2, 3 @gurlcode
..."abc" // "a", "b", "c" @gurlcode
function* generator( ) { yield 1; yield 2; yield 3;
} …generator( ) // 1, 2, 3 @gurlcode
@gurlcode
Generators 101 @gurlcode
function* count() { yield 1; yield; yield 3; } @gurlcode
function* count() { yield 1; yield; yield 3; } var
generator = count(); Generator {}; @gurlcode
function* count() { yield 1; yield; yield 3; } var
generator = count(); generator.next(); { value: 1, done: false } Generator {};
function* count() { yield 1; yield; yield 3; } var
generator = count(); generator.next(); generator.next(); generator.next(); generator.next(); { value: 1, done: false } { value: undefined, done: false } { value: 3, done: false } { value: undefined, done: true } Generator {}; @gurlcode
function* count() { yield 1; yield; yield 3; } var
generator = count(); generator.next(); generator.next(); generator.next(); generator.next(); { value: 1, done: false } { value: undefined, done: false } { value: 3, done: false } { value: undefined, done: true } Generator {}; @gurlcode
function* count() { yield 1; yield; yield 3; } var
generator = count(); generator.next(); generator.next(); generator.next(); generator.next(); { value: 1, done: false } { value: undefined, done: false } { value: 3, done: false } { value: undefined, done: true } Generator {}; @gurlcode
function* add() { const num = yield; yield 2 +
num; yield 4 + num; } var generator = add(); generator.next(); generator.next(2); generator.next(); generator.next(); { value: undefined, done: false } { value: 4, done: false } { value: 6, done: false } { value: undefined, done: true } Generator {}; @gurlcode
function* add() { const num = yield; yield 2 +
num; yield 4 + num; } var generator = add(); generator.next(); generator.next(2); generator.next(); generator.next(); { value: undefined, done: false } { value: 4, done: false } { value: 6, done: false } { value: undefined, done: true } Generator {}; @gurlcode
function* add() { const num = yield; yield 2 +
num; yield 4 + num; } var generator = add(); generator.next(); generator.next(2); generator.next(); generator.next(); { value: undefined, done: false } { value: 4, done: false } { value: 6, done: false } { value: undefined, done: true } Generator {}; @gurlcode
function* add() { const num = yield; yield 2 +
num; yield 4 + num; } var generator = add(); generator.next(); generator.next(2); generator.next(); generator.next(); { value: undefined, done: false } { value: 4, done: false } { value: 6, done: false } { value: undefined, done: true } Generator {}; @gurlcode
yield* @gurlcode
function* outer() { yield 1; yield* inner(); yield 2; }
function* inner() { yield “a”; yield “b”; } var generator = outer(); Generator {}; @gurlcode
function* outer() { yield 1; yield* inner(); yield 2; }
function* inner() { yield “a”; yield “b”; } var generator = outer(); Generator {}; @gurlcode
function* outer() { yield 1; yield* inner(); yield 2; }
function* inner() { yield “a”; yield “b”; } var generator = outer(); Generator {}; @gurlcode
function* outer() { yield 1; yield* inner(); yield 2; }
function* inner() { yield “a”; yield “b”; } var generator = outer(); Generator {}; @gurlcode
function* outer() { yield 1; yield* inner(); yield 2; }
function* inner() { yield “a”; yield “b”; } generator.next(); generator.next(); generator.next(); generator.next(); generator.next(); { value: 1, done: false } { value: “a”, done: false } { value: “b”, done: false } { value: 2, done: false } { value: undefined, done: true }
function* outer() { yield 1; yield* inner(); yield 2; }
function* inner() { yield “a”; yield “b”; } generator.next(); generator.next(); generator.next(); generator.next(); generator.next(); { value: 1, done: false } { value: “a”, done: false } { value: “b”, done: false } { value: 2, done: false } { value: undefined, done: true }
function* outer() { yield 1; yield* inner(); yield 2; }
function* inner() { yield “a”; yield “b”; } generator.next(); generator.next(); generator.next(); generator.next(); generator.next(); { value: 1, done: false } { value: “a”, done: false } { value: “b”, done: false } { value: 2, done: false } { value: undefined, done: true }
function* outer() { yield 1; yield* inner(); yield 2; }
function* inner() { yield “a”; yield “b”; } generator.next(); generator.next(); generator.next(); generator.next(); generator.next(); { value: 1, done: false } { value: “a”, done: false } { value: “b”, done: false } { value: 2, done: false } { value: undefined, done: true }
function* generator( ) { yield 1; yield 2; yield 3;
} ...generator() // 1, 2, 3 @gurlcode
Arrays Strings Maps Sets Generators @gurlcode
Iterable a data structure that provides an interface for iteration
@gurlcode
Iterable Protocol
Symbol.iterator @gurlcode
Symbol( "key" ) @gurlcode
Array.prototype[ Symbol.iterator ] @gurlcode
String.prototype[ Symbol.iterator ] @gurlcode
function* generator( ) { } generator[ Symbol.iterator ] @gurlcode
Iterator any object which implements the Iterator protocol @gurlcode
Iterator Protocol @gurlcode
function fakeIterator( ) { return { next: function( ) {
} }; } @gurlcode
function fakeIterator( ) { return { next: function( ) {
// return object // with a value // & a done key } }; } @gurlcode
const iterator = fakeIterator( ); const { value, done }
= iterator.next( ); @gurlcode
const iterator = fakeIterator( ); const { value, done }
= iterator.next( ); @gurlcode
Let’s create our own! @gurlcode
None
Async Iterator @gurlcode
Symbol.asyncIterator @gurlcode
... Spread Operator @gurlcode
{ } @gurlcode
...{ } @gurlcode
Thank you! @gurlcode