Lazy, chainable collection utilities for TypeScript, inspired by Kotlin's sequence API.
Sequence<T> is a native subclass of Iterator<T>. Operations are lazy — nothing runs until a terminal call like toArray() or forEach().
Github repo: https://github.com/geowarin/kollectionjs
pnpm add kollectionjs
const sequence = sequenceOf(1, 2, 3);
let result = sequence
.map(it => it * 2)
.filter(it => it % 3 == 0)
.toArray();
expect(result).toEqual([6]);
const result = entriesOf({ name: "yoda" })
.mapKeys(k => k.toUpperCase())
.mapValues(v => v.toUpperCase())
.toObject();
Full API documentation is available here.
| Description | |
|---|---|
asSequence |
Wraps any Iterable in a Sequence |
concat |
Creates a Sequence that lazily concatenates all given iterables in order |
emptySequence |
Creates an empty Sequence |
entriesOf |
Creates a Sequence of [key, value] pairs from a plain object, equivalent to `asSequence(Object |
generate |
Creates an infinite (or finite) Sequence by repeatedly applying next to a seed value |
range |
Creates a Sequence of numbers from start (inclusive) to endExclusive (exclusive), advancing by step |
sequenceOf |
Creates a Sequence from the given arguments |
Sequence<T> methods| Description | |
|---|---|
associate |
Returns a Map built by applying transform to each element and using the resulting [key, value] pair |
associateBy |
Returns a Map keyed by the result of keySelector (or a property name) |
associateWith |
Returns a Map where each element is the key and valueSelector provides the value |
average |
Returns the arithmetic mean of a numeric sequence |
chunk |
Splits the sequence into chunks of at most chunkSize elements |
contains |
Returns true if the sequence contains the given element (using ===) |
count |
Returns the number of elements that satisfy the predicate |
distinct |
Returns a sequence containing only distinct elements (first occurrence wins) |
distinctBy |
Returns a sequence containing only elements with distinct keys as computed by selector |
drop |
Returns a sequence that skips the first num elements |
dropWhile |
Returns a sequence that skips elements from the start while the predicate holds |
elementAt |
Returns the element at the given zero-based index, or undefined if the index is out of bounds |
elementAtOrElse |
Returns the element at the given zero-based index, or the result of defaultValue if the index is out of bounds |
every |
Determines whether all the members of this iterator satisfy the specified test |
filter |
Returns a sequence containing only the elements that satisfy the predicate |
filterKeys |
Returns a sequence containing only the [key, value] pairs whose key satisfies the predicate |
filterNot |
Returns a sequence containing only the elements that do not satisfy the predicate |
filterNotNull |
Returns a sequence with all null and undefined elements removed |
filterValues |
Returns a sequence containing only the [key, value] pairs whose value satisfies the predicate |
find |
Returns the first element matching the predicate, or undefined if none match |
first |
Returns the first element matching the predicate, or undefined if none match |
flatMap |
Maps each element to an iterable and flattens the results into a single sequence |
flatten |
Flattens a sequence of iterables into a single sequence |
fold |
Accumulates a value by applying operation left-to-right, starting from initial |
forEach |
Performs the specified action for each element in the iterator |
groupBy |
Groups elements into a Map by the key returned by keySelector |
indexOf |
Returns the zero-based index of the first occurrence of element (using ===), or -1 if it is not found |
indexOfFirst |
Returns the zero-based index of the first element matching the predicate, or -1 if none match |
indexOfLast |
Returns the zero-based index of the last element matching the predicate, or -1 if none match |
isEmpty |
Returns true if the sequence contains no elements |
isNotEmpty |
Returns true if the sequence contains at least one element |
joinToString |
Joins all elements into a single string |
last |
Returns the last element matching the predicate, or undefined if none match |
map |
Returns a sequence where each element is transformed by transform |
mapKeys |
Returns a sequence of [key, value] pairs where each key is transformed by transform |
mapNotNull |
Returns a sequence of transformed elements, skipping any null or undefined results |
mapValues |
Returns a sequence of [key, value] pairs where each value is transformed by transform |
max |
Returns the maximum element using the natural > ordering, or undefined if the sequence is empty |
maxBy |
Returns the element for which selector returns the largest value, or undefined if the sequence is empty |
maxWith |
Returns the maximum element according to the given compare function, or undefined if the sequence is empty |
min |
Returns the minimum element using the natural < ordering, or undefined if the sequence is empty |
minBy |
Returns the element for which selector returns the smallest value, or undefined if the sequence is empty |
minus |
Returns a sequence with the given element(s) excluded |
minWith |
Returns the minimum element according to the given compare function, or undefined if the sequence is empty |
none |
Returns true if no element satisfies the predicate |
onEach |
Performs the given action on each element and returns the same sequence unchanged |
partition |
Splits the sequence into two arrays: the first contains elements that satisfy the predicate, the second contains the rest |
plus |
Returns a sequence that contains all elements of this sequence followed by the given element or all elements of the given iterable |
reduce |
Calls the specified callback function for all the elements in this iterator |
reverse |
Returns a new sequence with elements in reverse order |
scan |
Returns a sequence of running accumulator values, starting with initial |
single |
Returns the single element matching the predicate, or undefined if there is no match or more than one match |
some |
Returns true if any element satisfies the predicate |
sorted |
Returns a new sequence with elements sorted in ascending order using natural ordering |
sortedBy |
Returns a new sequence sorted in ascending order by the key returned by selector |
sortedDescending |
Returns a new sequence with elements sorted in descending order using natural ordering |
sortedDescendingBy |
Returns a new sequence sorted in descending order by the key returned by selector |
sortedWith |
Returns a new sequence sorted using the given comparator |
sum |
Returns the sum of all elements in a numeric sequence |
sumBy |
Returns the sum of the values returned by selector for each element |
take |
Returns a sequence containing the first num elements |
takeWhile |
Returns a sequence of elements taken from the start while the predicate holds |
toArray |
Creates a new array from the values yielded by this iterator |
toMap |
Collects a sequence of [key, value] pairs into a Map |
toObject |
Collects a sequence of [key, value] pairs into a plain object |
toSet |
Collects all elements into a Set |
unzip |
Unzips a sequence of [A, B] pairs into a tuple of two arrays [A[], B[]] |
windowed |
Returns a sequence of sliding windows of the given size |
withIndex |
Returns a sequence of { index, value } pairs, where index is the zero-based position of each element |
zip |
Returns a sequence of pairs built by combining the elements of this sequence with elements from other |
zipWithNext |
Returns a sequence of pairs of each consecutive element with the next one |
from |
Creates a native iterator from an iterator or iterable object |
pnpm build # compile to dist/
pnpm test # run tests
pnpm typecheck # TypeScript type check
pnpm dev # watch mode
MIT