Skip to content

Latest commit

 

History

History

bifurcate

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

bifurcate

Split values into two groups.

Usage

var bifurcate = require( '@stdlib/utils/bifurcate' );

bifurcate( collection, [options,] filter )

Splits values into two groups. If an element in filter is truthy, the corresponding element in collection belongs to the first group; otherwise, the collection element belongs to the second group.

var arr = [ 'beep', 'boop', 'foo', 'bar' ];
var filter = [ true, true, false, true ];

var out = bifurcate( arr, filter );
// returns [ [ 'beep', 'boop', 'bar' ], [ 'foo' ] ]

The function accepts the following options:

  • returns: specifies the output format. If the option equals 'values', the function outputs element values. If the option equals 'indices', the function outputs element indices. If the option equals '*', the function outputs both element indices and values. Default: 'values'.

By default, the function returns element values. To return element indices, set the returns option to 'indices'.

var arr = [ 'beep', 'boop', 'foo', 'bar' ];
var filter = [ true, true, false, true ];

var opts = {
    'returns': 'indices'
};
var out = bifurcate( arr, opts, filter );
// returns [ [ 0, 1, 3 ], [ 2 ] ]

To return index-element pairs, set the returns option to '*'.

var arr = [ 'beep', 'boop', 'foo', 'bar' ];
var filter = [ true, true, false, true ];

var opts = {
    'returns': '*'
};
var out = bifurcate( arr, opts, filter );
// returns [ [ [ 0, 'beep' ], [ 1, 'boop' ], [ 3, 'bar' ] ], [ [ 2, 'foo' ] ] ]

Notes

  • Both collection and filter must be collections. A collection may be either an Array, Typed Array, or an array-like Object (excluding strings and functions).

Examples

var randu = require( '@stdlib/random/base/randu' );
var floor = require( '@stdlib/math/base/special/floor' );
var bifurcate = require( '@stdlib/utils/bifurcate' );

var vals;
var arr;
var out;
var f;
var i;
var j;

vals = [ 'beep', 'boop', 'foo', 'bar', 'woot', 'woot' ];

// Generate a random collection...
arr = new Array( 100 );
for ( i = 0; i < arr.length; i++ ) {
    j = floor( randu()*vals.length );
    arr[ i ] = vals[ j ];
}

// Randomly assign collection values to a group...
f = new Array( arr.length );
for ( i = 0; i < arr.length; i++ ) {
    f[ i ] = ( randu() < 0.5 );
}

// Compute the groups:
out = bifurcate( arr, f );
console.log( out );

See Also