iterCuAnyBy

Create an iterator which cumulatively tests whether at least one iterated value passes a test implemented by a predicate function.

Usage

var iterCuAnyBy = require( '@stdlib/iter/cuany-by' );

iterCuAnyBy( iterator, predicate[, thisArg] )

Returns an iterator which cumulatively tests whether at least one iterated value passes a test implemented by a predicate function.

var array2iterator = require( '@stdlib/array/to-iterator' );

function predicate( v ) {
    return ( v > 0 );
}

var arr = array2iterator( [ 0, 0, 0, 1, 0 ] );

var it = iterCuAnyBy( arr, predicate );

var v = it.next().value;
// returns false

v = it.next().value;
// returns false

v = it.next().value;
// returns false

v = it.next().value;
// returns true

v = it.next().value;
// returns true

var bool = it.next().done;
// returns true

The returned iterator protocol-compliant object has the following properties:

  • next: function which returns an iterator protocol-compliant object containing the next iterated value (if one exists) assigned to a value property and a done property having a boolean value indicating whether the iterator is finished.
  • return: function which closes an iterator and returns a single (optional) argument in an iterator protocol-compliant object.

A predicate function is provided two arguments:

  • value: iterated value
  • index: iteration index (zero-based)

To set the predicate function execution context, provide a thisArg.

var array2iterator = require( '@stdlib/array/to-iterator' );

function predicate( v ) {
    this.count += 1;
    return ( v < 0 );
}

var ctx = {
    'count': 0
};

var it = iterCuAnyBy( array2iterator( [ 1, 2, -1, 4 ] ), predicate, ctx );
// returns <Object>

var v = it.next().value;
// returns false

v = it.next().value;
// returns false

v = it.next().value;
// returns true

v = it.next().value;
// returns true

var count = ctx.count;
// returns 3

Notes

  • A predicate function is invoked for each iterated value until the first truthy predicate function return value. Upon encountering the first truthy return value, the returned iterator ceases to invoke the predicate function and returns true for each subsequent iterated value of the provided input iterator.

Examples

var randu = require( '@stdlib/random/iter/randu' );
var iterCuAnyBy = require( '@stdlib/iter/cuany-by' );

function threshold( r ) {
    return ( r > 0.95 );
}

// Create an iterator which generates uniformly distributed pseudorandom numbers:
var opts = {
    'iter': 100
};
var riter = randu( opts );

// Create an iterator which cumulatively tests whether at least one iterated value passes a test implemented by a predicate function:
var it = iterCuAnyBy( riter, threshold );

// Perform manual iteration...
var r;
while ( true ) {
    r = it.next();
    if ( r.done ) {
        break;
    }
    console.log( r.value );
}
Did you find this page helpful?