Skip to content

Instantly share code, notes, and snippets.

@missinglink
Last active October 9, 2015 14:07
Show Gist options
  • Select an option

  • Save missinglink/4939c16ad1dba7ac3f75 to your computer and use it in GitHub Desktop.

Select an option

Save missinglink/4939c16ad1dba7ac3f75 to your computer and use it in GitHub Desktop.
emca6 infinitely cycle through values in Set using a generator and iterator
"use strict";
// generator to infinitely loop over a set
let infiniteCycleSet = function* ( set ){
let _seq = set.values()
while( true ){
let _cur = _seq.next()
if( _cur.done ){
_seq = set.values()
_cur = _seq.next()
}
yield _cur.value
}
}
// generator to infinitely loop over a set
// starting from a specific value
let infiniteCycleSetFrom = function* ( set, startAt ){
let _seq = set.values(), _target = startAt
while( true ){
let _cur = _seq.next()
if( _cur.done ){
_seq = set.values()
_cur = _seq.next()
}
if( _cur.value === _target ){
let _next = _seq.next()
if( _next.done ){
_seq = set.values()
_next = _seq.next()
}
_target = _next.value
yield _target
}
}
}
@missinglink
Copy link
Copy Markdown
Author

// example
let batman = new Set()
batman.add('dunna')
batman.add('nunna')
batman.add('batman!')
batman.add('')
// infiniteCycleSet example
for( let member of infiniteCycleSet( batman ) )
  console.log( member )
dunna
nunna
batman!

dunna
nunna
batman!

dunna
nunna
batman!
.. etc
// infiniteCycleSetFrom example
for( let member of infiniteCycleSetFrom( batman, 'batman!' ) )
  console.log( member )
batman!

dunna
nunna
batman!

dunna
nunna
batman!

dunna
nunna
.. etc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment