push

    Add one or more elements to the end of a collection.

    Usage

    var push = require( '@stdlib/utils/push' );
    

    push( collection, ...items )

    Adds one or more elements to the end 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 = push( arr, 6.0, 7.0 );
    // returns [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 ]
    
    var bool = ( out === arr );
    // returns true
    

    In contrast to Array.prototype.push, 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, 0, 2 );
    arr[ 0 ] = 1.0;
    arr[ 1 ] = 2.0;
    
    var out = push( arr, 3.0 );
    // returns <Float64Array>[ 1.0, 2.0, 3.0 ]
    
    var bool = ( out === arr );
    // returns false
    
    bool = ( out.buffer === arr.buffer );
    // returns true
    
    out = push( out, 4.0 );
    // returns <Float64Array>[ 1.0, 2.0, 3.0, 4.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 an ArrayBuffer does not have enough bytes in which to store all elements, the function allocates a new ArrayBuffer capable of holding 2^n elements, where n is the next power of 2. This procedure is similar to how environments internally handle dynamic memory allocation for Arrays.
    • Beware when providing typed arrays which are views pointing to a shared (or pooled) ArrayBuffer. Because the function sets ArrayBuffer 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 exclusive ArrayBuffer; otherwise, be sure to plan for and guard against mutated state.

    Examples

    var Float64Array= require( '@stdlib/array/float64' );
    var push = require( '@stdlib/utils/push' );
    
    var arr;
    var i;
    
    arr = new Float64Array();
    for ( i = 0; i < 100; i++ ) {
        arr = push( arr, i );
    }
    console.log( arr );