bifurcateEntriesBy
Split element entries into two groups according to a predicate function.
Usage
var bifurcateEntriesBy = require( '@stdlib/array/base/bifurcate-entries-by' );
bifurcateEntriesBy( x, predicate[, thisArg] )
Splits element entries into two groups according to a predicate function.
function predicate( v ) {
return v[ 0 ] === 'b';
}
var x = [ 'beep', 'boop', 'foo', 'bar' ];
var out = bifurcateEntriesBy( x, predicate );
// returns [ [ [ 0, 'beep' ], [ 1, 'boop' ], [ 3, 'bar' ] ], [ [ 2, 'foo' ] ] ]
A predicate
function is provided the following arguments:
- value: current array element.
- index: current array element index.
- arr: input array.
To set the predicate
function execution context, provide a thisArg
.
function predicate( v ) {
this.count += 1;
return v[ 0 ] === 'b';
}
var x = [ 'beep', 'boop', 'foo', 'bar' ];
var context = {
'count': 0
};
var out = bifurcateEntriesBy( x, predicate, context );
// returns [ [ [ 0, 'beep' ], [ 1, 'boop' ], [ 3, 'bar' ] ], [ [ 2, 'foo' ] ] ]
var cnt = context.count;
// returns 4
Examples
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var take = require( '@stdlib/array/base/take-indexed' );
var bifurcateEntriesBy = require( '@stdlib/array/base/bifurcate-entries-by' );
function predicate( v ) {
// Use the first letter of each element to define groups:
return v[ 0 ] === 'b';
}
// Define an initial array of values:
var values = [ 'beep', 'boop', 'foo', 'bar', 'woot', 'woot' ];
// Sample from the initial array to generate a random collection:
var indices = discreteUniform( 100, 0, values.length-1, {
'dtype': 'generic'
});
var x = take( values, indices );
// returns [...]
// Split the values:
var out = bifurcateEntriesBy( x, predicate );
// returns [...]
console.log( out );