This repository was archived by the owner on Feb 20, 2019. It is now read-only.
File tree 3 files changed +48
-0
lines changed
3 files changed +48
-0
lines changed Original file line number Diff line number Diff line change @@ -64,6 +64,7 @@ import isLeapYear from './leap-year'
64
64
import removeElementFromArray from './removeElementFromArray'
65
65
import generatePassword from './generate-password'
66
66
import tail from './tail'
67
+ import makeObjectIterable from './makeObjectIterable'
67
68
68
69
export {
69
70
reverseArrayInPlace ,
@@ -132,4 +133,5 @@ export {
132
133
removeElementFromArray ,
133
134
generatePassword ,
134
135
tail ,
136
+ makeObjectIterable ,
135
137
}
Original file line number Diff line number Diff line change
1
+ export default makeObjectIterable
2
+
3
+ /**
4
+ * Original Source: https://stackoverflow.com/questions/48132121/how-to-make-iterable-object-in-javascript
5
+ *
6
+ * Makes a regular object iterable so that it can be used in constructs such
7
+ * as a for-of loop.
8
+ *
9
+ * @param {Object } obj - object on which iteration is desired
10
+ * @returns {Object } - returns the same object
11
+ */
12
+ function makeObjectIterable ( obj ) {
13
+ Object . defineProperty ( obj , Symbol . iterator , {
14
+ writable : false ,
15
+ enumerable : false ,
16
+ configurable : true ,
17
+ value : function iteratorCreator ( ) {
18
+ let idx = 0
19
+ const ks = Object . keys ( obj )
20
+ return {
21
+ next : function nextElement ( ) {
22
+ return {
23
+ value : obj [ ks [ idx ++ ] ] ,
24
+ done : idx > ks . length ,
25
+ }
26
+ } ,
27
+ }
28
+ } ,
29
+ } )
30
+
31
+ return obj
32
+ }
Original file line number Diff line number Diff line change
1
+ import test from 'ava'
2
+ import { makeObjectIterable } from '../src'
3
+
4
+ test ( 'check if the iterator returns correct values ' , t => {
5
+ const myObj = { a : 1 , b : 2 , c : 'XKCD' }
6
+ const out = makeObjectIterable ( myObj )
7
+ const a = [ ]
8
+ const b = [ ]
9
+ Object . keys ( myObj ) . map ( item => a . push ( myObj [ item ] ) )
10
+ for ( const v of out ) {
11
+ b . push ( v )
12
+ }
13
+ t . deepEqual ( a , b )
14
+ } )
You can’t perform that action at this time.
0 commit comments