Flatten an array.
var flattenArray = require( '@stdlib/utils/flatten-array' );
Flattens an array
.
var arr = [ 1, [2, [3, [4, [ 5 ], 6], 7], 8], 9 ];
var out = flattenArray( arr );
// returns [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
The function accepts the following options
:
- depth: maximum depth to flatten.
- copy:
boolean
indicating whether to deep copyarray
elements. Default:false
. - equalDims:
boolean
indicating whether allarray
elements have equal dimensions. Default:false
.
To flatten to a specified depth, set the depth
option.
var arr = [ 1, [2, [3, [4, [ 5 ], 6], 7], 8], 9 ];
var out = flattenArray( arr, {
'depth': 2
});
// returns [ 1, 2, 3, [4, [5], 6], 7, 8, 9 ]
var bool = ( arr[1][1][1] === out[3] );
// returns true
To deep copy array
elements, set the copy
option to true
.
var arr = [ 1, [2, [3, [4, [ 5 ], 6], 7], 8], 9 ];
var out = flattenArray( arr, {
'depth': 2,
'copy': true
});
// returns [ 1, 2, 3, [4, [5], 6], 7, 8, 9 ]
var bool = ( arr[1][1][1] === out[3] );
// returns false
By default, the function handles the generic case in which a provided array
may be heterogeneous (contain mixed data types) or have unknown dimensions. If all array
elements are known to have the same dimensions, setting the equalDims
option to true
allows the implementation to make performance optimizations.
// All elements are 1x3...
var arr = [
[ [ 1, 2, 3 ] ],
[ [ 4, 5, 6 ] ],
[ [ 7, 8, 9 ] ],
[ [ 10, 11, 12 ] ]
];
var out = flattenArray( arr, {
'equalDims': true
});
// returns [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]
Returns a function
optimized for flattening arrays
having specified dimensions.
var flatten = flattenArray.factory( [3,3] );
var arr = [
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
];
var out = flatten( arr );
// returns [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
arr = [
[ 11, 12, 13 ],
[ 14, 15, 16 ],
[ 17, 18, 19 ]
]
out = flatten( arr );
// returns [ 11, 12, 13, 14, 15, 16, 17, 18, 19 ]
The function accepts the following options
:
- copy:
boolean
indicating whether to deep copyarray
elements. Default:false
.
To deep copy array
elements, set the copy
option to true
.
var flatten = flattenArray.factory( [3,3] );
var arr = [
[ 1, 2, 3 ],
[ 4, {'x': 5}, 6 ],
[ 7, 8, 9 ]
];
var out = flatten( arr, {
'copy': true
});
// returns [ 1, 2, 3, 4, {'x':5}, 6, 7, 8, 9 ]
var bool = ( arr[1][1] === out[4] );
// returns false
- A flatten
function
returned by the factory method does not validate that inputarrays
actually have the specified dimensions.
var flattenArray = require( '@stdlib/utils/flatten-array' );
var xStride;
var yStride;
var zStride;
var tmp1;
var tmp2;
var arr;
var val;
var out;
var N;
var M;
var L;
var i;
var j;
var k;
N = 1000;
M = 100;
L = 10;
// Create an NxMxL (3D) array...
arr = new Array( N );
for ( i = 0; i < N; i++ ) {
tmp1 = new Array( M );
for ( j = 0; j < M; j++ ) {
tmp2 = new Array( L );
for ( k = 0; k < L; k++ ) {
tmp2[ k ] = (M*L*i) + (j*L) + k + 1;
}
tmp1[ j ] = tmp2;
}
arr[ i ] = tmp1;
}
// Create a flattened (strided) array:
out = flattenArray( arr );
// To access the arr[4][20][2] element...
xStride = M * L;
yStride = L;
zStride = 1;
val = out[ (4*xStride) + (20*yStride) + (2*zStride) ];
// returns 4203
bool = ( arr[4][20][2] === val );
// returns true