All Projects → labs42io → Itiriri Async

labs42io / Itiriri Async

Licence: mit
A library for asynchronous iteration.

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Itiriri Async

Performance Analysis Js
Map/Reduce/Filter/Find Vs For loop Vs For each Vs Lodash vs Ramda
Stars: ✭ 532 (+582.05%)
Mutual labels:  map, filter
Itiriri
A library built for ES6 iteration protocol.
Stars: ✭ 155 (+98.72%)
Mutual labels:  map, filter
Fungen
Replace boilerplate code with functional patterns using 'go generate'
Stars: ✭ 122 (+56.41%)
Mutual labels:  map, filter
leaflet-tag-filter-button
Adds tag filter control for layers (marker, geojson features etc.) to LeafLet.
Stars: ✭ 48 (-38.46%)
Mutual labels:  map, filter
stream
Go Stream, like Java 8 Stream.
Stars: ✭ 60 (-23.08%)
Mutual labels:  map, filter
linq
A familiar set of functions that operate on JavaScript iterables (ES2015+) in a similar way to .NET's LINQ does with enumerables.
Stars: ✭ 39 (-50%)
Mutual labels:  map, filter
Torchdata
PyTorch dataset extended with map, cache etc. (tensorflow.data like)
Stars: ✭ 226 (+189.74%)
Mutual labels:  map, filter
trimeter
(not ready yet) A simple but powerful job scheduler for Trio programs
Stars: ✭ 48 (-38.46%)
Mutual labels:  map, async-await
Pgo
Go library for PHP community with convenient functions
Stars: ✭ 51 (-34.62%)
Mutual labels:  map, filter
Cluster
Easy Map Annotation Clustering 📍
Stars: ✭ 1,132 (+1351.28%)
Mutual labels:  map
Imageviewer
HDR, PFM, DDS, KTX, EXR, PNG, JPG, BMP image viewer and manipulator
Stars: ✭ 71 (-8.97%)
Mutual labels:  filter
Buckets Js
A complete, fully tested and documented data structure library written in pure JavaScript.
Stars: ✭ 1,128 (+1346.15%)
Mutual labels:  map
Obs Streamfx
StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders - all for free! Be it 3D Transform, Blur, complex Masking, or even custom shaders, you'll find it all here.
Stars: ✭ 1,128 (+1346.15%)
Mutual labels:  filter
Dream3d
Data Analysis program and framework for materials science data analytics, based on the managing framework SIMPL framework.
Stars: ✭ 73 (-6.41%)
Mutual labels:  filter
Callbag Map Promise
Callbag map promise
Stars: ✭ 64 (-17.95%)
Mutual labels:  map
Hms Mapkit Demo
HMS Map Kit demo provides an example of intergrating HMS Map Android SDK. Personalizing how your map displays and interacts with your users tailors their experience to them
Stars: ✭ 76 (-2.56%)
Mutual labels:  map
Easylistczechandslovak
EasyList Czech and Slovak is an official filter list for AdBlock, Adblock Plus and other ad blockers out there
Stars: ✭ 63 (-19.23%)
Mutual labels:  filter
Mpk Ttss
Improved www.ttss.krakow.pl
Stars: ✭ 63 (-19.23%)
Mutual labels:  map
Queryql
Easily add filtering, sorting, and pagination to your Node.js REST API through your old friend: the query string!
Stars: ✭ 76 (-2.56%)
Mutual labels:  filter
Agilework
可视化低代码快速开发平台,面向业务、企业管理系统定制开发平台和应用平台,包括设计器、应用端。提供业务配置和集成开发能力,用户通过可视化拖拉拽配置式操作即可快速构建出能同时在PC和移动端运行的各类管理系统,对于企业客户的信息系统在管理模式、业务流程、表单界面、数据可视化展示、IoT管控等个性化需求,可以通过设计器,快速的进行个性化配置。并支持企业微信,公众号,钉钉等移动集成,实现用户跨区域移动办公。从而构建企业个性化的行业应用、集成应用和复杂的业务报表。
Stars: ✭ 76 (-2.56%)
Mutual labels:  map

itiriri-async

Build Status Coverage Status

Next generation library to manipulate asynchronous iterators.

import * as WebRequest from 'web-request';
import itiririAsync from 'itiriri-async';

type ToDo = {
  id: number,
  userId: number,
  title: string,
  completed: boolean,
};

async function* todosAsync() {
  let id = 1;
  while (true) {
    yield await WebRequest.json<ToDo>(`https://jsonplaceholder.typicode.com/todos/${id++}`);
  }
}

async function showTop2ToDos(): Promise<void> {
  const todos = await itiririAsync(todosAsync())
    .filter(x => !x.completed)
    .take(2)
    .awaitAll();

  console.log(todos.toArray());
}

showTop2ToDos();
// [ 'delectus aut autem', 'quis ut nam facilis et officia qui' ]

Check examples folder for more

Installation

Using npm:

$ npm install 'itiriri-async' --save

Importing:

import itiririAsync from 'itiriri-async';

Running tests

$ npm install
$ npm test

Complete list of methods

average

Returns the average value.

Syntax

average(): Promise<number>;
average(selector: (element: T, index: number) => number): Promise<number>;

Parameters

  • selector - (optional) a value transformer function to apply to each element

For a sequence with no elements returns undefined.

Example

import itiririAsync from 'itiriri-async';

async function* generator1() {
  yield* [41, 42, 43];
}

async function* generator2() {
  yield* [{value: 1}, {value: 2}];
}

itiririAsync(generator1()).average()  // returns Promise<42>
itiririAsync(generator2()).average(elem => elem.value) // returns Promise<1.5>

awaitAll

Awaits for all elements an returns IterableQuery. The ruterned iterable is a sync itiriri iterable.

Syntax

awaitAll(): Promise<IterableQuery<T>>

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [41, 40, 43];
}

// ...
const numbers = await itiririAsync(generator()).awaitAll();
// returns IterableQuery([41, 40, 43])

numbers.sort().toArray();
// returns: [40, 41, 43]

concat

Concatenates the sequence with another one.

Syntax

concat(other: T): AsyncIterableQuery<T>;
concat(other: Promise<T>): AsyncIterableQuery<T>;
concat(other: Iterable<T>): AsyncIterableQuery<T>;
concat(other: AsyncIterable<T>): AsyncIterableQuery<T>;

Parameters

  • other - (required) sequence to concatenate

Example

import itiririAsync from 'itiriri-async';

async function* generator1() {
  yield* [1, 2, 3];
}

async function* generator2() {
  yield* [4, 5];
}

(async function() {
  const q = await itiririAsync(generator1()).concat(generator2()).awaitAll();
  q.toArray();   // returns [1, 2, 3, 4, 5]
})();

(async function() {
  const q = await itiririAsync(generator1()).concat([2, 1]).awaitAll();
  q.toArray();   // returns [1, 2, 3, 2, 1]
})();

(async function() {
  const q = await itiririAsync(generator1()).concat(-1).awaitAll();
  q.toArray();   // returns [1, 2, 3, -1]
})();

concat is a deferred method and is executed only when the result sequence is iterated.

distinct

Returns a sequence of unique elements.

Syntax

distinct(): AsyncIterableQuery<T>;
distinct<S>(selector: (element: T) => S): AsyncIterableQuery<T>;

Parameters

  • selector - (optional) a value transformer function to be used for comparisons

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, 3, 3, 4, 2];
}

(async function () {
  const q = await itiririAsync(generator()).distinct().awaitAll();
  q.toArray();   // returns [1, 2, 3, 4]
})();

distinct is a deferred method and is executed only when the result sequence is iterated.

entries

Returns a sequence of key/value pair for each element and its index.

Syntax

entries(): AsyncIterableQuery<[number, T]>;

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* ['Bob', 'Alice'];
}

(async function () {
  const q = await itiririAsync(generator()).entries().awaitAll();
  q.toArray();   // returns [[0, 'Bob'], [1, 'Alice']]
})();

entries is a deferred method and is executed only when the result sequence is iterated.

every

Tests whether all the elements pass the predicate.

Syntax

every(predicate: (element: T, index: number) => boolean): Promise<boolean>;

Parameters

  • predicate - (required) function to test for each element

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 4, 3, 0];
}

(async function () {
  await itiririAsync(generator()).every(x => x >= 0); // true
})();

(async function () {
  await itiririAsync(generator()).every(x => x > 0); // false
})();

exclude

Returns a sequence of elements not contained in a given sequence.

Syntax

exclude<S>(others: Iterable<T>): AsyncIterableQuery<T>;
exclude<S>(others: Iterable<T>, selector: (element: T) => S): AsyncIterableQuery<T>;

Parameters

  • others - (required) a sequence of elements to be excluded
  • selector - (optional) a value transformer function to be used for comparisons

Example

import itiririAsync from 'itiriri-async';

async function* generator1() {
  yield* [2, 0, 1, 8, 2];
}

async function* generator2() {
  yield* [{ id: 1 }, { id: 2 }];
}

(async function () {
  const q = await itiririAsync(generator1()).exclude([0, 1]).awaitAll();
  q.toArray(); // returns [2, 8, 2]
})();

(async function () {
  const q = await itiririAsync(generator2()).exclude([{ id: 2 }], x => x.id).awaitAll();
  q.toArray(); // returns [{id: 1}]
})();

exclude is a deferred method and is executed only when the result sequence is iterated.

filter

Returns a sequence of elements that pass the predicate.

Syntax

filter(predicate: (element: T, index: number) => boolean): AsyncIterableQuery<T>;

Parameters

  • predicate - (required) function to test for each element

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, 4, 5];
}

(async function () {
  const q = await itiririAsync(generator()).filter(elem => elem < 3).awaitAll();
  q.toArray(); // returns [1, 2]
})();

(async function () {
  const q = await itiririAsync(generator()).filter(elem => elem > 10).awaitAll();
  q.toArray(); // returns []
})();

filter is a deferred method and is executed only when the result sequence is iterated.

find

Finds the first element that satisfies the specified predicate.

Syntax

find(predicate: (element: T, index: number) => boolean): Promise<T>;

Parameters

  • predicate - (required) function to test for each element

If no element satisfies the predicate, returns undefined.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, 4, 5];
}

(async function () {
  await itiririAsync(generator()).find(elem => elem > 2); // returns 3
})();

(async function () {
  await itiririAsync(generator()).find(elem => elem > 10); // returns undefined
})();

findIndex

Finds the first index at which a given element satisfies the specified predicate.

Syntax

findIndex(predicate: (element: T, index: number) => boolean): Promise<number>;

Parameters

  • predicate - (required) function to test for each element

If no element satisfies the predicate, returns -1.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, 4, 5];
}

(async function () {
  await itiririAsync(generator()).find(elem => elem > 2); // returns 2
})();

(async function () {
  await itiririAsync(generator()).find(elem => elem > 10); // returns -1
})();

findLast

Finds the last element that satisfies the specified predicate.

Syntax

findLast(predicate: (element: T, index: number) => boolean): Promise<T>;

Parameters

  • predicate - (required) function to test for each element

If no element satisfies the predicate, returns undefined.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, 4, 5];
}

(async function () {
  await itiririAsync(generator()).findLast(elem => elem > 2); // returns 5
})();

(async function () {
  await itiririAsync(generator()).findLast(elem => elem > 10); // returns undefined
})();

findLastIndex

Finds the last index at which a given element satisfies the specified predicate.

Syntax

findLastIndex(predicate: (element: T, index: number) => boolean): Promise<number>;

Parameters

  • predicate - (required) function to test for each element

If not present, returns -1.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, 4, 5];
}

(async function () {
  await itiririAsync(generator()).findLastIndex(elem => elem > 2); // returns 4
})();

(async function () {
  await itiririAsync(generator()).findLastIndex(elem => elem > 10); // returns -1
})();

first

Returns the first element in a sequence.

Syntax

first(): Promise<T>;

For an empty sequence returns undefined.

Example

import itiririAsync from 'itiriri-async';

async function* generator1() {
  yield* [1, 2, 3, 4, 5];
}

async function* generator2() {
  yield* [];
}

(async function () {
  await itiririAsync(generator1()).first(); // returns 1
})();

(async function () {
  await itiririAsync(generator2()).first(); // returns undefined
})();

flat

Returns a sequence with all sub-sequences concatenated.

Syntax

flat<T>(selector?: (element: T, index: number) => AsyncIterable<S>): AsyncIterableQuery<T>;

Parameters

  • selector - (optional) a value transformer function to be used for comparisons

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [[1, 2, 3], [4, 5]];
}

(async function () {
  const q = await itiririAsync(generator()).flat().awaitAll();
  q.toArray(); // returns [1, 2, 3, 4, 5]
})();

flat is a deferred method and is executed only when the result sequence is iterated.

forEach

Runs through every element and applies a given function.

Syntax

forEach(action: (element: T, index: number) => void): Promise<void>;

Parameters

  • action - (required) function to apply on each element

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  await itiririAsync(generator()).forEach(elem => console.log(elem));
})();
// 1
// 2
// 3

groupJoin

Returns a sequence of correlated elements where each element from the current sequence is matched with zero or more elements from the other sequence.

Syntax

groupJoin<TKey, TRight, TResult>(
    other: Iterable<TRight>,
    leftKeySelector: (element: T, index: number) => TKey,
    rightKeySelector: (element: TRight, index: number) => TKey,
    joinSelector: (left: T, right: TRight[]) => TResult,
  ): AsyncIterableQuery<TResult>;

Parameters

  • other - (required) sequence to join
  • leftKeySelector - (required) function that provides the key of each element from source sequence
  • rightKeySelector - (required) function that provides the key of each element from joined sequence
  • joinSelector - (required) a transformation function to apply on each joined element with group

The joinSelector function is called on each element from the source sequence and the array of matched elements from the joined sequence.
When an element from the source sequence doesn't match with any of the elements from the joined sequence, the joinSelector function will be called with an empty array.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  const q = await itiririAsync(generator())
    .groupJoin([1, 2, 3, 1, 1, 2], x => x, x => x, (x, y) => ({ x, y }))
    .awaitAll();
  q.toArray();
})();
//[ { x: 1, y: [ 1, 1, 1 ] },
//  { x: 2, y: [ 2, 2 ] },
//  { x: 3, y: [ 3 ] } ]

groupJoin is a deferred method and is executed only when the result sequence is iterated.

includes

Determines whether the sequence includes a certain element.

Syntax

includes(element: T): Promise<boolean>;
includes(element: T, fromIndex: number): Promise<boolean>;

Parameters

  • element - (required) the element to search for
  • fromIndex - (optional) starting index, defaults to 0

includes uses triple equals === to compare elements.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  await itiririAsync(generator()).includes(2); // returns: true
  await itiririAsync(generator()).includes(4); // returns: false
})();

indexOf

Returns the first (zero-based) index at which a given element can be found.

Syntax

indexOf(element: T): Promise<number>;
indexOf(element: T, fromIndex: number): Promise<number>;

Parameters

  • element - (required) the element to search for
  • fromIndex - (optional) starting index, defaults to 0

When an element is not found, returns -1.
indexOf uses triple equals === to compare elements.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  await itiririAsync(generator()).indexOf(2); // returns: 1
  await itiririAsync(generator()).indexOf(4); // returns: -1
})();

intersect

Returns a set intersection with a given sequence.

Syntax

intersect(others: Iterable<T>): AsyncIterableQuery<T>;
intersect<S>(other: Iterable<T>, selector: (element: T) => S): AsyncIterableQuery<T>;

Parameters

  • other - (required) the sequence to intersect with
  • selector - (optional) a value transformer function to be used for comparisons

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  const q = await itiririAsync(generator())
    .intersect([1, 2, 4])
    .awaitAll();
  q.toArray(); // returns: [1, 2]
})();

intersect is a deferred method and is executed only when the result sequence is iterated.

join

Returns a sequence of correlated elements transformation that match a given key.

Syntax

join<TKey, TRight, TResult>(
    other: Iterable<TRight>,
    leftKeySelector: (element: T, index: number) => TKey,
    rightKeySelector: (element: TRight, index: number) => TKey,
    joinSelector: (left: T, right: TRight) => TResult,
  ): AsyncIterableQuery<TResult>;

Parameters

  • other - (required) sequence to join
  • leftKeySelector - (required) function that provides the key of each element from source sequence
  • rightKeySelector - (required) function that provides the key of each element from joined sequence
  • joinSelector - (required) a transformation function to apply on each matched tuple

The join method works as an sql inner join.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  const q = await itiririAsync(generator())
    .join([1, 1, 2], x => x, x => x, (x, y) => ({ x, y }))
    .awaitAll();
  q.toArray(); // returns: [ { x: 1, y: 1 }, { x: 1, y: 1 }, { x: 2, y: 2 } ]
})();

join is a deferred method and is executed only when the result sequence is iterated.

keys

Returns a sequence of keys for each index in the source sequence.

Syntax

keys(): AsyncIterableQuery<number>;

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* ['a', 'b', 'c'];
}

(async function () {
  const q = await itiririAsync(generator()).keys().awaitAll();
  q.toArray(); // returns: [0, 1, 2]
})();

keys is a deferred method and is executed only when the result sequence is iterated.

last

Returns the last element in a sequence.

Syntax

last(): Promise<T>;

For an empty sequence returns undefined.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, -2];
}

(async function () {
  await itiririAsync(generator()).last(); // returns: -2
})();

lastIndexOf

Returns the last index at which a given element can be found.

Syntax

lastIndexOf(element: T): Promise<number>;
lastIndexOf(element: T, fromIndex: number): Promise<number>;

Parameters

  • element - (required) the element to search for
  • fromIndex - (optional) starting index, defaults to 0

When an element is not found, returns -1.
lastIndexOf uses triple equals === to compare elements.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, 2, 1];
}

(async function () {
  await itiririAsync(generator()).lastIndexOf(2); // returns: 3
})();

leftJoin

Returns a sequence of correlated elements transformation that match a given key.

Syntax

leftJoin<TKey, TRight, TResult>(
    other: Iterable<TRight>,
    leftKeySelector: (element: T, index: number) => TKey,
    rightKeySelector: (element: TRight, index: number) => TKey,
    joinSelector: (left: T, right?: TRight) => TResult,
  ): AsyncIterableQuery<TResult>;

Parameters

  • other - (required) sequence to join
  • leftKeySelector - (required) function that provides the key of each element from source sequence
  • rightKeySelector - (required) function that provides the key of each element from joined sequence
  • joinSelector - (required) a transformation function to apply on each matched tuple

The leftJoin method works as an sql left join. When an element from the left sequence doesn't match with any of the elements from the right sequence, the joinSelector function is called with an undefined right value.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  const q = await itiririAsync(generator())
    .leftJoin([2, 3, 4, 2], n => n, n => n, (a, b) => `${a}-${b || '#'}`)
    .awaitAll();
  q.toArray(); // returns ['1-#', '2-2', '2-2', '3-3']
})();

leftJoin is a deferred method and is executed only when the result sequence is iterated.

length

Returns the number of elements in a sequence.

Syntax

length(): Promise<number>;
length(predicate: (element: T, index: number) => boolean): Promise<number>;

Parameters

  • predicate - (optional) a function to count only the elements that match the predicate

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  await itiririAsync(generator()).length(); // returns 3
})();

map

Returns a sequence of transformed values.

Syntax

map<S>(selector: (element: T, index: number) => S): AsyncIterableQuery<S>;

Parameters

  • selector - (required) a value transformer function to apply to each element

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

function x10(numbers: AsyncIterable<number>) {
  return itiririAsync(numbers).map(n => n * 10);
}

(async function(){
  const numbers = await x10(generator()).awaitAll();
  console.log(numbers); // [10, 20, 30]
})();

map is a deferred method and is executed only when the result sequence is iterated.

max

Returns the maximum element in a sequence.

Syntax

max(): Promise<T>;
max(compareFn: (a: T, b: T) => number): Promise<T>;

Parameters

  • compareFn - (optional) a comparer function that compares two elements from a sequence and returns:
    • -1 when a is less than b
    • 1 when a is greater b
    • 0 when a equals to b

If sequence is empty, returns undefined.

Example

async function* generator1() {
  yield* [1, 42, 3];
}

async function* generator2() {
  yield* [];
}


(async function () {
  await itiririAsync(generator1()).max(); // returns 42
  await itiririAsync(generator2()).max(); // returns undefined
})();

min

Returns the minimum element in a sequence.

Syntax

min(): Promise<T>;
min(compareFn: (a: T, b: T) => number): Promise<T>;

Parameters

  • compareFn - (optional) a comparer function that compares two elements from a sequence and returns:
    • -1 when a is less than b
    • 1 when a is greater b
    • 0 when a equals to b

If sequence is empty, returns undefined.

Example

import itiririAsync from 'itiriri-async';

async function* generator1() {
  yield* [1, -2, 3];
}

async function* generator2() {
  yield* [];
}

(async function () {
  await itiririAsync(generator1()).min(); // returns -1
  await itiririAsync(generator2()).min(); // returns undefined
})();

nth

Returns the element at a specified index.

Syntax

nth(index: number): Promise<T>;

Parameters

  • index - (required) zero based index at which to get the element

If index is out of the range, returns undefined .

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, -2, 3];
}

(async function () {
  await itiririAsync(generator()).nth(2); // returns: 3
  await itiririAsync(generator()).nth(3); // returns: undefined
})();

prepend

Returns a sequence with given elements at the beginning.

Syntax

prepend(other: T): AsyncIterableQuery<T>;
prepend(other: Promise<T>): AsyncIterableQuery<T>;
prepend(other: Iterable<T>): AsyncIterableQuery<T>;
prepend(other: AsyncIterable<T>): AsyncIterableQuery<T>;

Parameters

  • other - (required) the sequence to be added at the beginning

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, -2, 3];
}

(async function () {
  const q = await itiririAsync(generator()).prepend(4).awaitAll();
  q.toArray(); // returns: [4, 1, -2, 3]
})();

(async function () {
  const q = await itiririAsync(generator()).prepend([0, 4]).awaitAll();
  q.toArray(); // returns: [0, 4, 1, -2, 3]
})();

prepend is a deferred method and is executed only when the result sequence is iterated.

reduce

Applies a function against an accumulator and each element (from left to right) to reduce it to a single value.

Syntax

reduce(
    callback: (accumulator: T, current: T, index: number) => T,
  ): Promise<T>;

reduce<S>(
    callback: (accumulator: S, current: T, index: number) => S,
    initialValue: S,
  ): Promise<S>;

Parameters

  • callback - (required) function to execute on each element in the sequence, taking three arguments
    • accumulator the accumulator accumulates the callback's return values;
    • current the current element being processed;
    • currentIndex the index of the current element being processed;
  • initialValue - (optional) value to use as the first argument to the first call of the callback

Calling reduce on an empty sequence without an initial value throws an error.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  // 5 + 10 + 20 + 30
  await itiririAsync(generator()).reduce((accum, elem) => accum + elem * 10, 5); // returns 65
})();

skip

Skips the specified number of elements from the beginning of sequence and returns the remaining ones.

Syntax

skip(count: number): AsyncIterableQuery<T>;

Parameters

  • count - (required) number of elements to skip

When count is greater than actual number of elements, results in an empty sequence.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  const q = await itiririAsync(generator()).skip(1).awaitAll();
  q.toArray(); // returns: [2, 3]
})();

(async function () {
  const q = await itiririAsync(generator()).skip(10).awaitAll();
  q.toArray(); // returns: []
})();

skip is a deferred method and is executed only when the result sequence is iterated.

slice

Returns a sequence that represents the range of elements from start to end.

Syntax

slice(start: number, end: number): AsyncIterableQuery<T>;

Parameters

  • start - (required) zero-based index at which to begin extraction
  • end - (required) zero-based index before which to end extraction.

The end index is not included in the result.

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, 3, 4];
}

(async function () {
  const q = await itiririAsync(generator()).slice(2, 4).awaitAll();
  q.toArray(); // returns: [3, 3]
})();

slice is a deferred method and is executed only when the result sequence is iterated.

some

Tests whether at least one element passes the predicate.

Syntax

some(predicate: (element: T, index: number) => boolean): Promise<boolean>;

Parameters

  • predicate - (required) function to test for each element

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3, -3, 4, 0];
}

(async function () {
  await itiririAsync(generator()).some(x => x < 0); // returns: true
  await itiririAsync(generator()).some(x => x > 5); // returns: false
})();

sum

Returns the sum of all elements.

Syntax

sum(): number;
sum(selector: (element: T, index: number) => number): Promise<number>;

Parameters

  • selector - (optional) a value transformer function to apply to each element

Optionally, a function can be provided to apply a transformation and map each element to a value.

Example

import itiririAsync from 'itiriri-async';

async function* generator1() {
  yield* [1, 2, 3];
}

async function* generator2() {
  yield* [{ val: 3 }, { val: 5 }];
}

(async function () {
  await itiririAsync(generator1()).sum(); // returns: 6
  await itiririAsync(generator2()).sum(x => x.val); // returns: 8
})();

take

Returns a specified number of elements from the beginning of sequence.

Syntax

take(count: number): AsyncIterableQuery<T>;

Parameters

  • count - (required) number of elements to take

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 2, 3];
}

(async function () {
  const q = await itiririAsync(generator()).take(2).awaitAll();
  q.toArray(); // returns: [1, 2]
})();

(async function () {
  const q = await itiririAsync(generator()).take(0).awaitAll();
  q.toArray(); // returns: []
})();

take is a deferred method and is executed only when the result sequence is iterated.

union

Returns a set union with a given sequence.

Syntax

union(other: AsyncIterable<T>): AsyncIterableQuery<T>;
union<S>(other: AsyncIterable<T>, selector: (element: T) => S): AsyncIterableQuery<T>;

Parameters

  • other - (required) the sequence to join with
  • selector - (optional) a value transformer function to be used for comparisons

Example

import itiririAsync from 'itiriri-async';

async function* generator1() {
  yield* [1, 2, 3];
}

async function* generator2() {
  yield* [3, 4, 5];
}

(async function () {
  const q = await itiririAsync(generator1()).union(generator2()).awaitAll();
  q.toArray(); // returns [1, 2, 3, 4, 5]
})();

union is a deferred method and is executed only when the result sequence is iterated.

values

Returns a sequence of values for each index in the source sequence.

Syntax

values(): AsyncIterableQuery<T>;

Example

import itiririAsync from 'itiriri-async';

async function* generator() {
  yield* [1, 0, 2, 3];
}

(async function () {
  const q = await itiririAsync(generator()).values().awaitAll();
  q.toArray(); // [1, 0, 2, 3]
})();

values is a deferred method and is executed only when the result sequence is iterated.

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].