This repository was archived by the owner on Feb 20, 2019. It is now read-only.
File tree Expand file tree Collapse file tree 3 files changed +48
-0
lines changed Expand file tree Collapse file tree 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'
6464import removeElementFromArray from './removeElementFromArray'
6565import generatePassword from './generate-password'
6666import tail from './tail'
67+ import makeObjectIterable from './makeObjectIterable'
6768
6869export {
6970 reverseArrayInPlace ,
@@ -132,4 +133,5 @@ export {
132133 removeElementFromArray ,
133134 generatePassword ,
134135 tail ,
136+ makeObjectIterable ,
135137}
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