prepend
Add elements from one collection to the beginning of another collection.
Usage
var prepend = require( '@stdlib/utils/prepend' );
prepend( collection1, collection2 )
Adds elements from one collection
to the beginning of another collection
. A collection
may be either an Array
, Typed Array
, or an array-like Object
(i.e., an Object
having a valid writable length
property).
var arr = [ 1.0, 2.0, 3.0, 4.0, 5.0 ];
var out = prepend( arr, [ 6.0, 7.0 ] );
// returns [ 6.0, 7.0, 1.0, 2.0, 3.0, 4.0, 5.0 ]
var bool = ( out === arr );
// returns true
Note that the function returns the extended collection. For typed arrays, the returned value is a new typed array view whose underlying ArrayBuffer
may not equal the underlying ArrayBuffer
for the input collection
.
var ArrayBuffer = require( '@stdlib/array/buffer' );
var Float64Array = require( '@stdlib/array/float64' );
var buf = new ArrayBuffer( 3*8 ); // 8 bytes per double
var arr = new Float64Array( buf, 8, 2 );
arr[ 0 ] = 1.0;
arr[ 1 ] = 2.0;
var out = prepend( arr, [ 3.0 ] );
// returns <Float64Array>[ 3.0, 1.0, 2.0 ]
var bool = ( out === arr );
// returns false
bool = ( out.buffer === arr.buffer );
// returns true
out = prepend( out, [ 4.0 ] );
// returns <Float64Array>[ 4.0, 3.0, 1.0, 2.0 ]
bool = ( out.buffer === arr.buffer );
// returns false
Notes
- The function adds elements to a typed array by setting values in the underlying
ArrayBuffer
. If anArrayBuffer
does not have enough bytes in which to store all elements, the function allocates a newArrayBuffer
capable of holding2^n
elements, wheren
is the next power of2
. This procedure is similar to how environments internally handle dynamic memory allocation forArrays
. - Beware when providing typed arrays which are views pointing to a shared (or pooled)
ArrayBuffer
. Because the function setsArrayBuffer
bytes outside of a provided view, the function may overwrite bytes belonging to one or more external views. This could be a potential security vulnerability. Prefer providing typed arrays which have an exclusiveArrayBuffer
; otherwise, be sure to plan for and guard against mutated state.
Examples
var Float64Array = require( '@stdlib/array/float64' );
var prepend = require( '@stdlib/utils/prepend' );
var arr;
var i;
var j;
arr = new Float64Array();
for ( i = 0; i < 100; i++ ) {
j = i * 3;
arr = prepend( arr, [ j+2, j+1, j ] );
}
console.log( arr );