235 lines
6.7 KiB
Plaintext
235 lines
6.7 KiB
Plaintext
|
|
||
|
{{alias}}( collection, [options,] predicate, done )
|
||
|
Splits values into two groups according to a predicate function.
|
||
|
|
||
|
When invoked, the predicate 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
|
||
|
predicate function accepts two arguments, the predicate function is
|
||
|
provided:
|
||
|
|
||
|
- `value`
|
||
|
- `next`
|
||
|
|
||
|
If the predicate function accepts three arguments, the predicate function is
|
||
|
provided:
|
||
|
|
||
|
- `value`
|
||
|
- `index`
|
||
|
- `next`
|
||
|
|
||
|
For every other predicate function signature, the predicate function is
|
||
|
provided all four arguments.
|
||
|
|
||
|
The `next` callback takes two arguments:
|
||
|
|
||
|
- `error`: error argument
|
||
|
- `group`: value group
|
||
|
|
||
|
If an predicate 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 a predicate function calls the `next` callback with a truthy group value,
|
||
|
a collection value is placed in the first group; otherwise, a collection
|
||
|
value is placed in the second group.
|
||
|
|
||
|
If provided an empty collection, the function calls the `done` callback with
|
||
|
an empty array as the second argument.
|
||
|
|
||
|
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.
|
||
|
|
||
|
predicate: Function
|
||
|
Predicate function indicating 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 predicate( 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, predicate, done )
|
||
|
1000
|
||
|
2500
|
||
|
3000
|
||
|
[ [ 1000, 3000 ], [ 2500 ] ]
|
||
|
|
||
|
// Output group results as indices:
|
||
|
> var opts = { 'returns': 'indices' };
|
||
|
> {{alias}}( arr, opts, predicate, done )
|
||
|
1000
|
||
|
2500
|
||
|
3000
|
||
|
[ [ 2, 0 ], [ 1 ] ]
|
||
|
|
||
|
// Output group results as index-value pairs:
|
||
|
> opts = { 'returns': '*' };
|
||
|
> {{alias}}( arr, opts, predicate, done )
|
||
|
1000
|
||
|
2500
|
||
|
3000
|
||
|
[ [ [ 2, 1000 ], [ 0, 3000 ] ], [ [ 1, 2500 ] ] ]
|
||
|
|
||
|
// Limit number of concurrent invocations:
|
||
|
> function predicate( 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, predicate, done )
|
||
|
2500
|
||
|
3000
|
||
|
1000
|
||
|
[ [ 3000, 1000 ], [ 2500 ] ]
|
||
|
|
||
|
// Process sequentially:
|
||
|
> function predicate( 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, predicate, done )
|
||
|
3000
|
||
|
2500
|
||
|
1000
|
||
|
[ [ 3000, 1000 ], [ 2500 ] ]
|
||
|
|
||
|
|
||
|
{{alias}}.factory( [options,] predicate )
|
||
|
Returns a function which splits values into two groups according to an
|
||
|
predicate 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.
|
||
|
|
||
|
predicate: Function
|
||
|
Predicate function indicating which group an element in the input
|
||
|
collection belongs to.
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
out: Function
|
||
|
A function which splits values into two groups.
|
||
|
|
||
|
Examples
|
||
|
--------
|
||
|
> function predicate( 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, predicate );
|
||
|
> function done( error, result ) {
|
||
|
... if ( error ) {
|
||
|
... throw error;
|
||
|
... }
|
||
|
... console.log( result );
|
||
|
... };
|
||
|
> var arr = [ 3000, 2500, 1000 ];
|
||
|
> f( arr, done )
|
||
|
3000
|
||
|
2500
|
||
|
1000
|
||
|
[ [ 3000, 1000 ], [ 2500 ] ]
|
||
|
> arr = [ 2000, 1500, 1000 ];
|
||
|
> f( arr, done )
|
||
|
2000
|
||
|
1500
|
||
|
1000
|
||
|
[ [ 2000, 1000 ], [ 1500 ] ]
|
||
|
|
||
|
See Also
|
||
|
--------
|
||
|
|