function flatten2dBy( x, shape, colexicographic, out, stride, offset, clbk, thisArg ) { // eslint-disable-line max-len
	var S0;
	var S1;
	var i0;
	var i1;
	var a0;
	var io;

	// Extract loop variables:
	S0 = shape[ 1 ]; // for nested arrays, the last dimensions have the fastest changing indices
	S1 = shape[ 0 ];

	// Iterate over the array dimensions...
	io = offset;
	if ( colexicographic ) {
		for ( i0 = 0; i0 < S0; i0++ ) {
			for ( i1 = 0; i1 < S1; i1++ ) {
				out[ io ] = clbk.call( thisArg, x[ i1 ][ i0 ], [ i1, i0 ], x ); // equivalent to storing in column-major (Fortran-style) order
				io += stride;
			}
		}
		return out;
	}
	for ( i1 = 0; i1 < S1; i1++ ) {
		a0 = x[ i1 ];
		for ( i0 = 0; i0 < S0; i0++ ) {
			out[ io ] = clbk.call( thisArg, a0[ i0 ], [ i1, i0 ], x ); // equivalent to storing in row-major (C-style) order
			io += stride;
		}
	}
	return out;
}
Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array.

## Notes

-   The function assumes that all nested arrays have the same length (i.e., the input array is **not** a ragged array).

@param {Array<Collection>} x - input nested array
@param {NonNegativeIntegerArray} shape - array shape
@param {boolean} colexicographic - specifies whether to flatten array values in colexicographic order
@param {Collection} out - output array
@param {integer} stride - output array stride
@param {NonNegativeInteger} offset - output array index offset
@param {Function} clbk - callback function
@param {*} [thisArg] - callback execution context
@returns {Collection} output array

@example
var Float64Array = require( '@stdlib/array/float64' );

function scale( v ) {
    return v * 2;
}

var x = [ [ 1, 2 ], [ 3, 4 ] ];

var out = flatten2dBy( x, [ 2, 2 ], false, new Float64Array( 4 ), 1, 0, scale );
// returns <Float64Array>[ 2, 4, 6, 8 ]

@example
var Float64Array = require( '@stdlib/array/float64' );

function scale( v ) {
    return v * 2;
}

var x = [ [ 1, 2 ], [ 3, 4 ] ];

var out = flatten2dBy( x, [ 2, 2 ], true, new Float64Array( 4 ), 1, 0, scale );
// returns <Float64Array>[ 2, 6, 4, 8 ]