time-to-botec/squiggle/node_modules/@stdlib/utils/async/group-by/docs/repl.txt
NunoSempere b6addc7f05 feat: add the node modules
Necessary in order to clearly see the squiggle hotwiring.
2022-12-03 12:44:49 +00:00

233 lines
6.7 KiB
Plaintext

{{alias}}( collection, [options,] indicator, done )
Groups values according to an indicator function.
When invoked, the indicator function is provided a maximum of four
arguments:
- `value`: collection value
- `index`: collection index
- `collection`: the input collection
- `next`: a callback to be invoked after processing a collection `value`
The actual number of provided arguments depends on function length. If the
indicator function accepts two arguments, the indicator function is
provided:
- `value`
- `next`
If the indicator function accepts three arguments, the indicator function is
provided:
- `value`
- `index`
- `next`
For every other indicator function signature, the indicator function is
provided all four arguments.
The `next` callback takes two arguments:
- `error`: error argument
- `group`: value group
If an indicator function calls the `next` callback with a truthy `error`
argument, the function suspends execution and immediately calls the `done`
callback for subsequent `error` handling.
If provided an empty collection, the function calls the `done` callback with
an empty object as the second argument.
The `group` returned by an indicator function should be a value which can be
serialized as an object key.
Execution is *not* guaranteed to be asynchronous. To guarantee asynchrony,
wrap the `done` callback in a function which either executes at the end of
the current stack (e.g., `nextTick`) or during a subsequent turn of the
event loop (e.g., `setImmediate`, `setTimeout`).
The function does not support dynamic collection resizing.
The function does not skip `undefined` elements.
Parameters
----------
collection: Array|TypedArray|Object
Input collection over which to iterate. If provided an object, the
object must be array-like (excluding strings and functions).
options: Object (optional)
Function options.
options.limit: integer (optional)
Maximum number of pending invocations. Default: Infinity.
options.series: boolean (optional)
Boolean indicating whether to process each collection element
sequentially. Default: false.
options.returns: string (optional)
If `values`, values are returned; if `indices`, indices are returned; if
`*`, both indices and values are returned. Default: 'values'.
options.thisArg: any (optional)
Execution context.
indicator: Function
Indicator function specifying which group an element in the input
collection belongs to.
done: Function
A callback invoked either upon processing all collection elements or
upon encountering an error.
Examples
--------
// Basic usage:
> function indicator( value, index, next ) {
... setTimeout( onTimeout, value );
... function onTimeout() {
... console.log( value );
... next( null, ( index%2 === 0 ) );
... }
... };
> function done( error, result ) {
... if ( error ) {
... throw error;
... }
... console.log( result );
... };
> var arr = [ 3000, 2500, 1000 ];
> {{alias}}( arr, indicator, done )
1000
2500
3000
{ "true": [ 1000, 3000 ], "false": [ 2500 ] }
// Output group results as indices:
> var opts = { 'returns': 'indices' };
> {{alias}}( arr, opts, indicator, done )
1000
2500
3000
{ "true": [ 2, 0 ], "false": [ 1 ] }
// Output group results as index-value pairs:
> opts = { 'returns': '*' };
> {{alias}}( arr, opts, indicator, done )
1000
2500
3000
{ "true": [ [ 2, 1000 ], [ 0, 3000 ] ], "false": [ [ 1, 2500 ] ] }
// Limit number of concurrent invocations:
> function indicator( value, index, next ) {
... setTimeout( onTimeout, value );
... function onTimeout() {
... console.log( value );
... next( null, ( index%2 === 0 ) );
... }
... };
> function done( error, result ) {
... if ( error ) {
... throw error;
... }
... console.log( result );
... };
> var opts = { 'limit': 2 };
> var arr = [ 3000, 2500, 1000 ];
> {{alias}}( arr, opts, indicator, done )
2500
3000
1000
{ "true": [ 3000, 1000 ], "false": [ 2500 ] }
// Process sequentially:
> function indicator( value, index, next ) {
... setTimeout( onTimeout, value );
... function onTimeout() {
... console.log( value );
... next( null, ( index%2 === 0 ) );
... }
... };
> function done( error, result ) {
... if ( error ) {
... throw error;
... }
... console.log( result );
... };
> var opts = { 'series': true };
> var arr = [ 3000, 2500, 1000 ];
> {{alias}}( arr, opts, indicator, done )
3000
2500
1000
{ "true": [ 3000, 1000 ], "false": [ 2500 ] }
{{alias}}.factory( [options,] indicator )
Returns a function which groups values according to an indicator function.
Parameters
----------
options: Object (optional)
Function options.
options.limit: integer (optional)
Maximum number of pending invocations. Default: Infinity.
options.series: boolean (optional)
Boolean indicating whether to process each collection element
sequentially. Default: false.
options.returns: string (optional)
If `values`, values are returned; if `indices`, indices are returned; if
`*`, both indices and values are returned. Default: 'values'.
options.thisArg: any (optional)
Execution context.
indicator: Function
Indicator function specifying which group an element in the input
collection belongs to.
Returns
-------
out: Function
A group-by function.
Examples
--------
> function indicator( value, index, next ) {
... setTimeout( onTimeout, value );
... function onTimeout() {
... console.log( value );
... next( null, ( index%2 === 0 ) );
... }
... };
> var opts = { 'series': true };
> var f = {{alias}}.factory( opts, indicator );
> function done( error, result ) {
... if ( error ) {
... throw error;
... }
... console.log( result );
... };
> var arr = [ 3000, 2500, 1000 ];
> f( arr, done )
3000
2500
1000
{ "true": [ 3000, 1000 ], "false": [ 2500 ] }
> arr = [ 2000, 1500, 1000 ];
> f( arr, done )
2000
1500
1000
{ "true": [ 2000, 1000 ], "false": [ 1500 ] }
See Also
--------