Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

groupValuesBy

Group element values according to an indicator function.

Usage

var groupValuesBy = require( '@stdlib/array/base/group-values-by' );

groupValuesBy( x, indicator[, thisArg] )

Groups element values according to an indicator function.

function indicator( v ) {
    return v[ 0 ];
}

var x = [ 'beep', 'boop', 'foo', 'bar' ];

var out = groupValuesBy( x, indicator );
// returns { 'b': [ 'beep', 'boop', 'bar' ], 'f': [ 'foo' ] }

An indicator function is provided the following arguments:

  • value: current array element.
  • index: current array element index.
  • arr: input array.

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

function indicator( v ) {
    this.count += 1;
    return v[ 0 ];
}

var x = [ 'beep', 'boop', 'foo', 'bar' ];

var context = {
    'count': 0
};
var out = groupValuesBy( x, indicator, context );
// returns { 'b': [ 'beep', 'boop', 'bar' ], 'f': [ 'foo' ] }

var cnt = context.count;
// returns 4

Notes

  • The value returned by an indicator function should be a value which can be serialized as an object key. As a counterexample,

    function indicator( v ) {
        return {};
    }
    var x = [ 'beep', 'boop', 'foo', 'bar' ];
    
    var out = groupValuesBy( x, indicator );
    // returns { '[object Object]': [ 'beep', 'boop', 'foo', 'bar' ] }

    while each group identifier is unique, all input array elements resolve to the same group because each group identifier serializes to the same string.

Examples

var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var take = require( '@stdlib/array/base/take-indexed' );
var groupValuesBy = require( '@stdlib/array/base/group-values-by' );

function indicator( v ) {
    // Use the first letter of each element to define groups:
    return v[ 0 ];
}

// 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 [...]

// Group the values:
var out = groupValuesBy( x, indicator );
// returns {...}

console.log( out );