@@ -113,46 +113,64 @@ export class Map<K extends AnyNotNil, V> {
113113 }
114114
115115 public entries ( ) : IterableIterator < [ K , V ] > {
116+ const getFirstKey = ( ) => this . firstKey ;
116117 const { items, nextKey } = this ;
117- let key = this . firstKey ;
118+ let key : K | undefined ;
119+ let started = false ;
118120 return {
119121 [ Symbol . iterator ] ( ) : IterableIterator < [ K , V ] > {
120122 return this ;
121123 } ,
122124 next ( ) : IteratorResult < [ K , V ] > {
123- const result = { done : ! key , value : [ key , items . get ( key ! ) ] as [ K , V ] } ;
124- key = nextKey . get ( key ! ) ;
125- return result ;
125+ if ( ! started ) {
126+ started = true ;
127+ key = getFirstKey ( ) ;
128+ } else {
129+ key = nextKey . get ( key ! ) ;
130+ }
131+ return { done : ! key , value : [ key ! , items . get ( key ! ) ] as [ K , V ] } ;
126132 } ,
127133 } ;
128134 }
129135
130136 public keys ( ) : IterableIterator < K > {
137+ const getFirstKey = ( ) => this . firstKey ;
131138 const nextKey = this . nextKey ;
132- let key = this . firstKey ;
139+ let key : K | undefined ;
140+ let started = false ;
133141 return {
134142 [ Symbol . iterator ] ( ) : IterableIterator < K > {
135143 return this ;
136144 } ,
137145 next ( ) : IteratorResult < K > {
138- const result = { done : ! key , value : key } ;
139- key = nextKey . get ( key ! ) ;
140- return result as IteratorResult < K > ;
146+ if ( ! started ) {
147+ started = true ;
148+ key = getFirstKey ( ) ;
149+ } else {
150+ key = nextKey . get ( key ! ) ;
151+ }
152+ return { done : ! key , value : key ! } ;
141153 } ,
142154 } ;
143155 }
144156
145157 public values ( ) : IterableIterator < V > {
158+ const getFirstKey = ( ) => this . firstKey ;
146159 const { items, nextKey } = this ;
147- let key = this . firstKey ;
160+ let key : K | undefined ;
161+ let started = false ;
148162 return {
149163 [ Symbol . iterator ] ( ) : IterableIterator < V > {
150164 return this ;
151165 } ,
152166 next ( ) : IteratorResult < V > {
153- const result = { done : ! key , value : items . get ( key ! ) } ;
154- key = nextKey . get ( key ! ) ;
155- return result ;
167+ if ( ! started ) {
168+ started = true ;
169+ key = getFirstKey ( ) ;
170+ } else {
171+ key = nextKey . get ( key ! ) ;
172+ }
173+ return { done : ! key , value : items . get ( key ! ) } ;
156174 } ,
157175 } ;
158176 }
0 commit comments