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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
730
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
420
Claude Team Plan導入・ガイド
tk3fftk
0
190
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
170
5分で問診!Composer セキュリティ健康診断
codmoninc
0
210
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.4k
はてなアカウント基盤 State of the Union
cockscomb
1
1.3k
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
230
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
200
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.8k
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
570
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
528
40k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1k
Designing Powerful Visuals for Engaging Learning
tmiket
1
450
Building the Perfect Custom Keyboard
takai
2
810
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Evolving SEO for Evolving Search Engines
ryanjones
0
240
A better future with KSS
kneath
240
18k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
4 Signs Your Business is Dying
shpigford
187
22k
How to build a perfect <img>
jonoalderson
1
5.8k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
We Have a Design System, Now What?
morganepeng
55
8.2k
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