Flatten
Flattens an array.
Installation
$ npm install compute-flatten
For use in the browser, use browserify.
Usage
var flatten = ;
flatten( arr[, options] )
Flattens an array
.
var arr = 1 2 3 4 5 6 7 8 9 ;var out = ;// returns [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
The function
accepts the following options
:
- depth: nonnegative
integer
specifying the depth to which the inputarray
should be flattened. Default:Number.POSITIVE_INFINITY
. - matrix:
boolean
indicating whether the function can assume that the inputarray
is a matrix; i.e., anarray
(ofarrays
) having uniform dimensions. Default:false
. - copy:
boolean
indicating whetherarray
elements should be deep copied. Default:false
.
To limit the depth to which the input array
is flattened, set the depth
option:
var opts ='depth': 2;var out = ;// returns [ 1, 2, 3, [4, [ 5 ], 6], 7, 8, 9 ]
To deep copy array
elements, set the copy
option to true
.
var opts ='depth': 2'copy': true;var out = ;// returns [ 1, 2, 3, [4, [ 5 ], 6], 7, 8, 9 ]console;// returns false
To indicate that the function may assume that the input array
is a matrix, set the matrix
option to true
.
var arr =1 2 34 5 67 8 9;var opts ='matrix': true;var out = ;// returns [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Notes:
- this
function
handles the generic case where anarray
may be heterogeneous (contain mixed data types) or have unknown dimensions. - if repeatedly flattening
arrays
having the same dimensions, create a customized flattenfunction
, as documented below.
flatten.createFlatten( dims[, options] )
Returns a customized function
for flattening arrays
having specified dimensions.
var dims = 3 3 ;// Create a flatten function customized for flattening 3x3 arrays:var flat = flatten;var arr =1 2 34 5 67 8 9;var out = ;// returns [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
The function
accepts the following options
:
- copy:
boolean
indicating whetherarray
elements should be deep copied. Default:false
.
To deep copy array
elements, set the copy
option to true
.
var dims = 3 3 ;var opts ='copy': true;var flat = flatten;var arr =1 2 34 'x':5 67 8 9;var out = ;// returns [ 1, 2, 3, 4, {'x':5}, 6, 7, 8, 9 ]console;// returns false
Notes:
- when repeatedly flattening
arrays
having the same shape, creating and applying a customizedflatten
function will provide performance benefits. - no attempt is made to validate that input
arrays
actually have the specified dimensions. Input values are assumed to be validarrays
. If validation is needed, see validate.io-size.
Examples
var flatten = ;var xStrideyStridezStridedatatmp1tmp2arrvalN M Li j k;N = 1000;M = 100;L = 10;// Create an NxMxL (3D) array...data = N ;for i = 0; i < N; i++tmp1 = M ;for j = 0; j < M; j++tmp2 = L ;for k = 0; k < L; k++tmp2 k = M*L*i + j*L + k + 1;tmp1 j = tmp2;data i = tmp1;// Create a flattened (strided) array:arr = ;// To access the data[4][20][2] element...xStride = M * L;yStride = L;zStride = 1;val = arr 4*xStride + 20*yStride + 2*zStride ;console;// returns 4203console;// returns true
To run the example code from the top-level application directory,
$ node ./examples/index.js
Tests
Unit
Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:
$ make test
All new feature development should have corresponding unit tests to validate correct functionality.
Test Coverage
This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:
$ make test-cov
Istanbul creates a ./reports/coverage
directory. To access an HTML version of the report,
$ make view-cov
License
Copyright
Copyright © 2015. Athan Reines.