groupIndices

Group element indices as arrays associated with distinct keys.

Usage

var groupIndices = require( '@stdlib/array/base/group-indices' );

groupIndices( x, groups )

Groups element indices as arrays associated with distinct keys.

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

var out = groupIndices( x, groups );
// returns { 'b': [ 0, 1, 3 ], 'f': [ 2 ] }

Notes

  • Each value in groups should resolve to a value which can be serialized as an object key. As a counterexample,

    var x = [ 'beep', 'boop', 'foo', 'bar' ];
    var groups = [ {}, {}, {}, {} ];
    
    var out = groupIndices( x, groups );
    // returns { '[object Object]': [ 0, 1, 2, 3 ] }
    

    while each "group" 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 groupIndices = require( '@stdlib/array/base/group-indices' );

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

// Randomly assign collection values to groups:
var groups = discreteUniform( x.length, 0, values.length, {
    'dtype': 'generic'
});

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

console.log( out );
Did you find this page helpful?