flattenBy

Flatten an n-dimensional nested array according to a callback function.

Usage

var flattenBy = require( '@stdlib/array/base/flatten-by' );

flattenBy( x, shape, colexicographic, clbk[, thisArg] )

Flattens an n-dimensional nested array according to a callback function.

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

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

var out = flattenBy( 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 = flattenBy( 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 = flattenBy( x, [ 2, 2 ], false, scale, ctx );
// returns [ 2, 4, 6, 8 ]

var count = ctx.count;
// returns 4

flattenBy.assign( x, shape, colexicographic, out, stride, offset, clbk[, thisArg] )

Flattens an n-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 = flattenBy.assign( x, [ 2, 2 ], false, out, 1, 0, scale );
// returns <Float64Array>[ 2, 4, 6, 8 ]

var bool = ( y === out );
// returns true

y = flattenBy.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 flattenBy = require( '@stdlib/array/base/flatten-by' );

var fcn = naryFunction( abs, 1 );

// Define a 2x2x1x2x2 array:
var x = [
    [
        [
            [
                [ -1, -2 ], [ -3, -4 ]
            ]
        ],
        [
            [
                [ -5, -6 ], [ -7, -8 ]
            ]
        ]
    ],
    [
        [
            [
                [ -9, -10 ], [ -11, -12 ]
            ]
        ],
        [
            [
                [ -13, -14 ], [ -15, -16 ]
            ]
        ]
    ]
];

var out = flattenBy( x, [ 0, 0, 0, 0, 0 ], false, fcn );
// returns []

out = flattenBy( x, [ 0, 0, 0, 0, 0 ], true, fcn );
// returns []

out = flattenBy( x, [ 1, 1, 1, 1, 1 ], false, fcn );
// returns [ 1 ]

out = flattenBy( x, [ 1, 1, 1, 1, 1 ], true, fcn );
// returns [ 1 ]

out = flattenBy( x, [ 1, 2, 1, 2, 2 ], false, fcn );
// returns [ 1, 2, 3, 4, 5, 6, 7, 8 ]

out = flattenBy( x, [ 1, 2, 1, 2, 2 ], true, fcn );
// returns [ 1, 5, 3, 7, 2, 6, 4, 8 ]

out = flattenBy( x, [ 2, 2, 1, 2, 2 ], false, fcn );
// returns [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 ]

out = flattenBy( x, [ 2, 2, 1, 2, 2 ], true, fcn );
// returns [ 1, 9, 5, 13, 3, 11, 7, 15, 2, 10, 6, 14, 4, 12, 8, 16 ]
Did you find this page helpful?