
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
iterator-tools
Advanced tools
Iterator tools inspired from the python standard library.
accumulate(iterable, func=(a, b) => a + b)Make an iterator that returns accumulated sums. If the optional func argument is supplied,
it should be a function of two arguments and it will be used instead of addition.
accumulate([1, 2, 3, 4, 5]) // 1 3 6 10 15accumulate([1, 2, 3, 4, 5], (a, b) => a * b) // 1 2 6 24 120
chain(...iterables)Make an iterator that returns elements from the first iterable until it is exhausted, then proceeds to the next iterable, until all of the iterables are exhausted.
chain('ABC', 'DEF') // A B C D E F
chainFromIterable(iterable)Alternate constructor for chain(). Gets chained inputs from a single iterable argument
that is evaluated lazily.
chainFromIterable(['ABC', 'DEF']) // A B C D E F
combinations(iterable, r)Return r length subsequences of elements from the input iterable.
combinations('ABCD', 2) // AB AC AD BC BD CDcombinations(range(4), 3) // 012 013 023 123
combinationsWithReplacement(iterable, r)Return r length subsequences of elements from the input iterable allowing
individual elements to be repeated more than once.
combinationsWithReplacement('ABC', 2) // AA AB AC BB BC CC
compress(data, selectors)Make an iterator that filters elements from data returning only those that have a
corresponding element in selectors that evaluates to true. Stops when either the
data or selectors iterables has been exhausted.
compress('ABCDEF', [1, 0, 1, 0, 1, 1]) // A C E F
count(start=0, step=1)Make an iterator that returns evenly spaced values starting with number start.
count(10) // 10 11 12 13 14 ...count(2.5, 0.5) // 2.5 3.0 3.5 ...
cycle(iterable)Make an iterator returning elements from the iterable and saving a copy of each.
cycle('ABCD') // A B C D A B C D A B C D ...
dropWhile(iterable, predicate=(i) => i)Make an iterator that drops elements from the iterable as long as the predicate is
true; afterwards, returns every element.
dropWhile([1, 4, 6, 4, 1], (x) => x < 5) // 6 4 1
filter(iterable, predicate=(i) => i)Make an iterator that filters elements from iterable returning only those for which the
predicate is true. If predicate isn't defined, return the items that are true.
filterFalse(range(10), (x) => x % 2) // 1 3 5 7 9
filterFalse(iterable, predicate=(i) => i)Make an iterator that filters elements from iterable returning only those for which the
predicate is false. If predicate isn't defined, return the items that are false.
filterFalse(range(10), (x) => x % 2) // 0 2 4 6 8
groupBy(iterable, key=(i) => i)Make an iterator that returns consecutive keys and groups from the iterable. The
key is a function computing a key value for each element. If not specified, key
defaults to an identity function and returns the element unchanged. Generally, the iterable needs
to already be sorted on the same key function.
groupBy('AAAABBBCCDAABBB') // A, A A A A// B, B B B// C, C C// D, D// A, A A// B, B B
map(...iterable, fn)Make an iterator that computes the function using arguments obtained from the iterables.
map([1, 2], [3, 4], (a, b) => a + b) // 4 6
mapApply(...iterable, fn)Make an iterator that computes the function using arguments obtained from the
iterables. Used instead of map() when argument parameters are already grouped in
arrays from a single iterable.
mapApply([[2, 5], [3, 2], [10, 3]], Math.pow) // 32 9 1000
permutations(iterable, r=undefined)Return successive r length permutations of elements in the iterable.
If r is undefined, r defaults to the length of the iterable and all
possible full-length permutations are generated.
permutations('ABCD', 2) // AB AC AD BA BC BD CA CB CD DA DB DCpermutations(range(3)) // 012 021 102 120 201 210
product(...iterables, repeat=1)Cartesian product of input iterables. To compute the product of an iterable with itself,
specify the number of repetitions with the optional repeat argument.
product('ABCD', 'xy') // Ax Ay Bx By Cx Cy Dx Dyproduct(range(2), 3) // 000 001 010 011 100 101 110 111
range(stop) or range(start, stop, step=1)Make an iterator that returns a number starting from start to stop, incremented by
step.
range(10) // 0 1 2 3 4 5 6 7 8 9range(1, 11) // 1 2 3 4 5 6 7 8 9 10range(0, 30, 5) // 0 5 10 15 20 25range(0, 10, 3) // 0 3 6 9range(0, -10, -1) // 0 -1 -2 -3 -4 -5 -6 -7 -8 -9
repeat(element, times=Infinity)Make an iterator that returns element over and over again. Runs indefinitely unless the
times argument is specified.
repeat(10, 3) // 10 10 10
slice(iterable, stop=Infinity) or slice(iterable, start=0, stop=Infinity, step=1)Make an iterator that returns selected elements from the iterable. If start is
non-zero, then elements from the iterable are skipped until start is reached. Afterward,
elements are returned consecutively unless step is set higher than one which results in
items being skipped.
slice('ABCDEFG', 2) // A Bslice('ABCDEFG', 2, 4) // C Dslice('ABCDEFG', 2, Infinity) // C D E F Gslice('ABCDEFG', 0, Infinity, 2) // A C E G
takeWhile(iterable, predicate=(i) => i)Make an iterator that returns elements from the iterable as long as the predicate
is true.
takeWhile([1, 4, 6, 4, 1], (x) => x < 5) // 1 4
tee(iterable, n=2)Return n independent iterators from a single iterable.
const [a, b] = tee([1, 2, 3]);a.next().value // 1a.next().value // 2b.next().value // 1
zip(...iterables)Make an iterator that aggregates elements from each of the iterables. Returns an iterator
of arrays, where the i-th array contains the i-th element from each of the argument iterables. The
iterator stops when the shortest input iterable is exhausted. With a single iterable argument, it
returns an iterator of arrays of size 1. With no arguments, it returns an empty iterator.
zip('ABCD', 'xy') // [A, x] [B, y]
zipLongest(...iterables)Make an iterator that aggregates elements from each of the iterables. If the
iterables are of uneven length, missing values are filled-in with undefined.
zipLongest('ABCD', 'xy') // [A, x] [B, y] [C, undefined] [D, undefined]
FAQs
Iterator tools for JavaScript
We found that iterator-tools demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.