function groupIndicesBy( x, indicator, thisArg ) {
	var get;
	var len;
	var out;
	var g;
	var o;
	var i;

	// Get the number of elements to group:
	len = x.length;

	// Resolve an accessor for retrieving array elements:
	get = resolveGetter( x );

	// Loop over the elements and assign each to a group...
	out = {};
	for ( i = 0; i < len; i++ ) {
		g = indicator.call( thisArg, get( x, i ), i, x );
		o = out[ g ];
		if ( isArray( o ) ) {
			o.push( i );
		} else {
			out[ g ] = [ i ];
		}
	}
	return out;
}
Groups element indices according to an indicator function.

@param {Collection} x - input array
@param {Function} indicator - indicator function specifying which group an element in the input collection belongs to
@param {*} [thisArg] - indicator function execution context
@returns {Object} group results

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

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

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