flatten2dBy
Flatten a two-dimensional nested array according to a callback function.
Usage
var flatten2dBy = require( '@stdlib/array/base/flatten2d-by' );
flatten2dBy( x, shape, colexicographic, clbk[, thisArg] )
Flattens a two-dimensional nested array according to a callback function.
function scale( v ) {
return v * 2;
}
var x = [ [ 1, 2 ], [ 3, 4 ] ];
var out = flatten2dBy( x, [ 2, 2 ], false, scale );
// returns [ 2, 4, 6, 8 ]
To flatten in colexicographic order, provide a third argument equal to true
.
function scale( v ) {
return v * 2;
}
var x = [ [ 1, 2 ], [ 3, 4 ] ];
var out = flatten2dBy( x, [ 2, 2 ], true, scale );
// returns [ 2, 6, 4, 8 ]
To set the callback execution context, provide a thisArg
argument.
function scale( v ) {
this.count += 1;
return v * 2;
}
var x = [ [ 1, 2 ], [ 3, 4 ] ];
var ctx = {
'count': 0
};
var out = flatten2dBy( x, [ 2, 2 ], false, scale, ctx );
// returns [ 2, 4, 6, 8 ]
var count = ctx.count;
// returns 4
flatten2dBy.assign( x, shape, colexicographic, out, stride, offset, clbk[, thisArg] )
Flattens a two-dimensional nested array according to a callback function and assigns elements to a provided output array.
var Float64Array = require( '@stdlib/array/float64' );
function scale( v ) {
return v * 2;
}
var x = [ [ 1, 2 ], [ 3, 4 ] ];
var out = new Float64Array( 4 );
var y = flatten2dBy.assign( x, [ 2, 2 ], false, out, 1, 0, scale );
// returns <Float64Array>[ 2, 4, 6, 8 ]
var bool = ( y === out );
// returns true
y = flatten2dBy.assign( x, [ 2, 2 ], true, out, 1, 0, scale );
// returns <Float64Array>[ 2, 6, 4, 8 ]
Notes
A callback function is provided the following arguments:
- value: nested array element.
- indices: element indices (in lexicographic order).
- arr: the input array.
Both functions assume that all nested arrays have the same length (i.e., the input array is not a ragged array).
Examples
var naryFunction = require( '@stdlib/utils/nary-function' );
var abs = require( '@stdlib/math/base/special/abs' );
var flatten2dBy = require( '@stdlib/array/base/flatten2d-by' );
var fcn = naryFunction( abs, 1 );
var x = [
[ -1, -2, -3, -4 ],
[ -5, -6, -7, -8 ],
[ -9, -10, -11, -12 ],
[ -13, -14, -15, -16 ]
];
var out = flatten2dBy( x, [ 0, 0 ], false, fcn );
// returns []
out = flatten2dBy( x, [ 0, 0 ], true, fcn );
// returns []
out = flatten2dBy( x, [ 1, 1 ], false, fcn );
// returns [ 1 ]
out = flatten2dBy( x, [ 1, 1 ], true, fcn );
// returns [ 1 ]
out = flatten2dBy( x, [ 2, 2 ], false, fcn );
// returns [ 1, 2, 5, 6 ]
out = flatten2dBy( x, [ 2, 2 ], true, fcn );
// returns [ 1, 5, 2, 6 ]
out = flatten2dBy( x, [ 3, 3 ], false, fcn );
// returns [ 1, 2, 3, 5, 6, 7, 9, 10, 11 ]
out = flatten2dBy( x, [ 3, 3 ], true, fcn );
// returns [ 1, 5, 9, 2, 6, 10, 3, 7, 11 ]
out = flatten2dBy( x, [ 4, 4 ], false, fcn );
// returns [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]
out = flatten2dBy( x, [ 4, 4 ], true, fcn );
// returns [ 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16 ]