filterArguments
Create a function that invokes a provided function according to a predicate function.
Usage
var filterArguments = require( '@stdlib/utils/filter-arguments' );
filterArguments( fcn, predicate[, thisArg] )
Returns a function
that invokes a provided function according to a predicate
function.
function foo( a, b ) {
return [ a, b ];
}
function predicate( v ) {
return ( v !== 2 );
}
var bar = filterArguments( foo, predicate );
var out = bar( 1, 2, 3 );
// returns [ 1, 3 ]
The predicate
function is provided the following arguments:
- value: argument value.
- index: argument index.
To set the this
context when invoking the input function, provide a thisArg
.
function predicate( v ) {
return ( v !== 2 );
}
function Foo() {
this.x = 1;
this.y = 2;
}
Foo.prototype.scale = function scale( a, b ) {
return [ this.x*a, this.y*b ];
};
var ctx = {
'x': 10,
'y': 20
};
var foo = new Foo();
var bar = filterArguments( foo.scale, predicate, ctx );
var out = bar( 1, 2, 3 );
// returns [ 10, 60 ]
Notes
- Only those arguments in which the
predicate
function returns a truthy value are applied to a provided function.
Examples
var filledarrayBy = require( '@stdlib/array/filled-by' );
var add = require( '@stdlib/math/base/ops/add' );
var filterArguments = require( '@stdlib/utils/filter-arguments' );
function fill( i ) {
return i;
}
function factory( i, j ) {
return predicate;
function predicate( value, index ) {
return ( i <= index ) && ( index < j );
}
}
// Create a data array:
var x = filledarrayBy( 10, 'float64', fill );
// Compute the sum of consecutive elements...
var f;
var i;
for ( i = 0; i < x.length-1; i++ ) {
f = filterArguments( add, factory( i, i+2 ) );
console.log( 'sum(x_%d, x_%d) = %d', i, i+1, f.apply( null, x ) );
}