Sergio Xalambrí
February 11, 2019

# Conceptos básicos de JS: Array#push

Aprende a usar Array#push, como se implementa a mano y casos de uso prácticos de este método de los array en JavaScript.

Array#push, o
`Array.prototype.push`, es un método que poseen todos lo arrays en JavaScript. Este método nos sirve para agregar uno o más valores nuevos a un array y el largo final del array con estos nuevos elementos. Veamos un ejemplo:

    const numbers = [1, 2, 3];
    const total = numbers.push(4, 5);
    console.log(numbers); // [1,2,3,4,5]
    console.log(total); // 5

Lo que hace Array#push entonces es agregar cada uno de los elementos que le pasemos y nos devuelve la propiedad `length` del array actualizado con estos elementos.

Si queremos hacer lo mismo que Array#push tendríamos que hacer algo similar a esto:

    const numbers = [1, 2, 3];

    numbers[numbers.length] = 4;
    numbers[numbers.length] = 5;

    console.log(numbers); // [1,2,3,4,5]
    console.log(numbers.length); // 5

Tendríamos que asignar nuestros nuevos elementos a la posición `array.length` del array, lo que dado que los arrays empiezan en 0 y length cuenta desde 1 significa agregarlo en una posición nueva inmediatamente después del último elemento que existe hasta ese momento.

## Sintaxis

La sintaxis completa de la función es la siguiente

    const total = array.push(...elements);

Array#push recibe uno o más argumentos, cada argumento es agregado al array uno por uno hasta que el último argumento quede al final del array. Por último se devuelve el tamaño nuevo del array.

## Implementando Array#push a mano

Veamos ahora como crear nuestro propio Array#push para entender mejor su funcionamiento. Vamos a implementarlo como una función llamada `push` cuyo primer valor va a ser el `array` al cual hacer push y el resto de los argumentos van a ser los elementos a agregar.

    function push(array, ...values) {
      for (let value of values) {
        array[array.length] = value;
      }
      return array.length;
    }

    const numbers = [1, 2, 3];
    const total = push(numbers, 4, 5);
    console.log(numbers); // [1,2,3,4,5]
    console.log(total); // 5

¿Qué es lo que hicimos? Nuestra función recibe el array al cuál queremos agregarle elemento y uno o más elementos, usando parámetros rest, los `...` antes de `values`, podemos entonces obtener todos estos valores a agregar como un array que si no hay argumentos está vacío y sino tiene todos los que pasemos. Internamente iteramos este array de valores y los vamos agregando uno por uno al array, al final devolvemos el nuevo largo del array.

## Casos de uso

Array#push es usado un montón en JavaScript. Por ejemplo para combinar dos arrays en uno solo.

    const numbers1 = [1, 2, 3];
    const numbers2 = [4, 5, 6];

    const total = numbers1.push(...numbers2);

    console.log(numbers1); // [1,2,3,4,5,6]
    console.log(total); // 6

Ahora `numbers1` va a tener todos los elementos de `numbers2`.

> Nota: ya que Array#push modifica el array en vez de crear uno nuevo cuando se trabaja de forma funcional se suele usar más Array#concat.

## Palabras finales

Este método es muy útil y es usado a diario al trabajar con Arrays en JavaScript cuando no se trabaja de forma funcional. Si no lo habías usado antes te recomiendo probar varios ejemplos de uso para familiarizarte e igualmente pruebe Array#concat como alternativa funcional y combinable con Array#map, Array#filter y Array#reduces.