Add one or more elements to the beginning of a collection.
Usage
var unshift = require( '@stdlib/utils/unshift' );
unshift( collection, ...items )
Adds one or more elements to the beginning of a 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 = unshift( 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
In contrast to Array.prototype.unshift, the function returns the extended collection, rather than the collection length. 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 = unshift( 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 = unshift( out, 4.0 ); // returns <Float64Array>[ 4.0, 3.0, 1.0, 2.0 ] bool = ( out.buffer === arr.buffer ); // returns false
Notes
- The function adds one or more elements to a typed array by setting values in the underlying
ArrayBuffer. If anArrayBufferdoes not have enough bytes in which to store all elements, the function allocates a newArrayBuffercapable of holding2^nelements, wherenis 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 setsArrayBufferbytes 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 unshift = require( '@stdlib/utils/unshift' ); var arr; var i; arr = new Float64Array(); for ( i = 0; i < 100; i++ ) { arr = unshift( arr, i ); } console.log( arr );
See Also
@stdlib/utils/pop: remove and return the last element of a collection.@stdlib/utils/push: add one or more elements to the end of a collection.@stdlib/utils/shift: remove and return the first element of a collection.