224 lines
6.2 KiB
Plaintext
224 lines
6.2 KiB
Plaintext
|
|
{{alias}}( collection, initial, [options,] reducer, done )
|
|
Applies a function against an accumulator and each element in a collection
|
|
and returns the accumulated result.
|
|
|
|
When invoked, `reducer` is provided a maximum of five arguments:
|
|
|
|
- `accumulator`: accumulated value
|
|
- `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
|
|
`reducer` accepts three arguments, `reducer` is provided:
|
|
|
|
- `accumulator`
|
|
- `value`
|
|
- `next`
|
|
|
|
If `reducer` accepts four arguments, `reducer` is provided:
|
|
|
|
- `accumulator`
|
|
- `value`
|
|
- `index`
|
|
- `next`
|
|
|
|
For every other `reducer` signature, `reducer` is provided all five
|
|
arguments.
|
|
|
|
The `next` callback accepts two arguments:
|
|
|
|
- `error`: error argument
|
|
- `accumulator`: accumulated value
|
|
|
|
If a provided function calls the `next` callback with a truthy `error`
|
|
argument, the function suspends execution and immediately calls the `done`
|
|
callback for subsequent `error` handling.
|
|
|
|
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.
|
|
|
|
If provided an empty collection, the function invokes the `done` callback
|
|
with the `initial` value as the second argument.
|
|
|
|
The function does not skip `undefined` elements.
|
|
|
|
When processing collection elements concurrently, *beware* of race
|
|
conditions when updating an accumulator. This is especially true when an
|
|
accumulator is a primitive (e.g., a number). In general, prefer object
|
|
accumulators.
|
|
|
|
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).
|
|
|
|
initial: any
|
|
Accumulator value used in the first invocation of the reduction
|
|
function.
|
|
|
|
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: true.
|
|
|
|
options.thisArg: any (optional)
|
|
Execution context.
|
|
|
|
reducer: Function
|
|
The function to invoke for each element in a collection.
|
|
|
|
done: Function
|
|
A callback invoked either upon processing all collection elements or
|
|
upon encountering an error.
|
|
|
|
Examples
|
|
--------
|
|
// Basic usage:
|
|
> function fcn( acc, value, index, next ) {
|
|
... setTimeout( onTimeout, value );
|
|
... function onTimeout() {
|
|
... console.log( value );
|
|
... acc.sum += value;
|
|
... next( null, acc );
|
|
... }
|
|
... };
|
|
> function done( error, acc ) {
|
|
... if ( error ) {
|
|
... throw error;
|
|
... }
|
|
... console.log( acc.sum );
|
|
... };
|
|
> var arr = [ 3000, 2500, 1000 ];
|
|
> var acc = { 'sum': 0 };
|
|
> {{alias}}( arr, acc, fcn, done )
|
|
3000
|
|
2500
|
|
1000
|
|
6500
|
|
|
|
// Limit number of concurrent invocations:
|
|
> function fcn( acc, value, index, next ) {
|
|
... setTimeout( onTimeout, value );
|
|
... function onTimeout() {
|
|
... console.log( value );
|
|
... acc.sum += value;
|
|
... next( null, acc );
|
|
... }
|
|
... };
|
|
> function done( error, acc ) {
|
|
... if ( error ) {
|
|
... throw error;
|
|
... }
|
|
... console.log( acc.sum );
|
|
... };
|
|
> var opts = { 'limit': 2 };
|
|
> var arr = [ 3000, 2500, 1000 ];
|
|
> var acc = { 'sum': 0 };
|
|
> {{alias}}( arr, acc, opts, fcn, done )
|
|
2500
|
|
3000
|
|
1000
|
|
6500
|
|
|
|
// Process concurrently:
|
|
> function fcn( acc, value, index, next ) {
|
|
... setTimeout( onTimeout, value );
|
|
... function onTimeout() {
|
|
... console.log( value );
|
|
... acc.sum += value;
|
|
... next( null, acc );
|
|
... }
|
|
... };
|
|
> function done( error, acc ) {
|
|
... if ( error ) {
|
|
... throw error;
|
|
... }
|
|
... console.log( acc.sum );
|
|
... };
|
|
> var opts = { 'series': false };
|
|
> var arr = [ 3000, 2500, 1000 ];
|
|
> var acc = { 'sum': 0 };
|
|
> {{alias}}( arr, acc, opts, fcn, done )
|
|
1000
|
|
2500
|
|
3000
|
|
6500
|
|
|
|
|
|
{{alias}}.factory( [options,] fcn )
|
|
Returns a function which applies a function against an accumulator and each
|
|
element in a collection and returns the accumulated result.
|
|
|
|
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: true.
|
|
|
|
options.thisArg: any (optional)
|
|
Execution context.
|
|
|
|
fcn: Function
|
|
The function to invoke for each element in a collection.
|
|
|
|
Returns
|
|
-------
|
|
out: Function
|
|
A function which invokes a function for each element in a collection.
|
|
|
|
Examples
|
|
--------
|
|
> function fcn( acc, value, index, next ) {
|
|
... setTimeout( onTimeout, value );
|
|
... function onTimeout() {
|
|
... console.log( value );
|
|
... acc.sum += value;
|
|
... next( null, acc );
|
|
... }
|
|
... };
|
|
> var opts = { 'series': false };
|
|
> var f = {{alias}}.factory( opts, fcn );
|
|
> function done( error, acc ) {
|
|
... if ( error ) {
|
|
... throw error;
|
|
... }
|
|
... console.log( acc.sum );
|
|
... };
|
|
> var arr = [ 3000, 2500, 1000 ];
|
|
> var acc = { 'sum': 0 };
|
|
> f( arr, acc, done )
|
|
1000
|
|
2500
|
|
3000
|
|
6500
|
|
> acc = { 'sum': 0 };
|
|
> arr = [ 2000, 1500, 1000 ];
|
|
> f( arr, acc, done )
|
|
1000
|
|
1500
|
|
2000
|
|
4500
|
|
|
|
See Also
|
|
--------
|
|
|