function forEach( arrays, shape, strides, offsets, fcn ) {
	var args;
	var idx;
	var M;
	var N;
	var f;
	var s;
	var o;
	var i;
	var j;

	if ( arguments.length === 5 ) {
		o = offsets;
		f = fcn;
	} else {
		f = offsets;
	}
	N = shape[ 0 ];
	M = arrays.length;
	idx = [];
	if ( o ) {
		for ( j = 0; j < M; j++ ) {
			idx.push( o[ j ] );
		}
	} else {
		for ( j = 0; j < M; j++ ) {
			s = strides[ j ];
			if ( s < 0 ) {
				idx.push( (1-N)*s );
			} else {
				idx.push( 0 );
			}
		}
	}
	args = [];
	for ( j = 0; j < M; j++ ) {
		args.push( 0 );
	}
	for ( i = 0; i < N; i++ ) {
		for ( j = 0; j < M; j++ ) {
			args[ j ] = arrays[ j ][ idx[ j ] ];
			idx[ j ] += strides[ j ];
		}
		f.apply( null, args );
	}
}
Strided array function.

@private
@param {Array<Collection>} arrays - strided arrays
@param {IntegerArray} shape - array containing the number of indexed elements
@param {IntegerArray} strides - strides
@param {NonNegativeIntegerArray} [offsets] - offsets
@param {Function} fcn - callback