Pregunta ¿Cómo agregar algo a una matriz?


¿Cómo añado un objeto (como una cadena o número) a una matriz en JavaScript?


2872


origen


Respuestas:


Utilizar el push() función para agregar a una matriz:

// initialize array
var arr = [
    "Hi",
    "Hello",
    "Bonjour"
];

// append new value to the array
arr.push("Hola");

console.log(arr);

Se imprimirá

["Hi", "Hello", "Bonjour", "Hola"]

Puedes usar el push() función para agregar más de un valor a una matriz en una sola llamada:

// initialize array
var arr = [ "Hi", "Hello", "Bonjour", "Hola" ];

// append multiple values to the array
arr.push("Salut", "Hey");

// display all values
for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
}

Se imprimirá

Hi
Hello
Bonjour
Hola 
Salut
Hey

Actualizar

Si desea agregar los elementos de una matriz a otra matriz, puede usar firstArray.concat(secondArray):

var arr = [
    "apple",
    "banana",
    "cherry"
];

arr = arr.concat([
    "dragonfruit",
    "elderberry",
    "fig"
]);

console.log(arr);

Se imprimirá

["apple", "banana", "cherry", "dragonfruit", "elderberry", "fig"]

3378



Si solo está agregando una sola variable, entonces push() funciona bien Si necesita agregar otra matriz, use concat():

var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];

var ar3 = ar1.concat(ar2);

alert(ar1);
alert(ar2);
alert(ar3);

Will escupirá:

"1,2,3"
"4,5,6"
"1,2,3,4,5,6"

El concat no afecta ar1 y ar2 a menos que se reasigne, por ejemplo:

ar1 = ar1.concat(ar2);
alert(ar1);

Mostrará:

"1,2,3,4,5,6"

Mucha información genial aquí


954



Algunas evaluaciones comparativas rápidas (cada prueba = 500k elementos añadidos y los resultados son promedios de varias ejecuciones) mostraron lo siguiente:

Firefox 3.6 (Mac):

  • Arrays pequeños: arr[arr.length] = b es más rápido (300 ms frente a 800 ms)
  • Arrays grandes: arr.push(b) es más rápido (500 ms frente a 900 ms)

Safari 5.0 (Mac):

  • Arrays pequeños: arr[arr.length] = b es más rápido (90 ms frente a 115 ms)
  • Arrays grandes: arr[arr.length] = b es más rápido (160 ms frente a 185 ms)

Google Chrome 6.0 (Mac):

  • Arrays pequeños: Sin diferencia significativa (¡Y Chrome es RÁPIDO! ¡Solo ~ 38ms!)
  • Arrays grandes: Sin diferencia significativa (160ms)

me gusta el arr.push() mejor sintaxis, pero creo que estaría mejor con el arr[arr.length] Versión, al menos en velocidad bruta. Sin embargo, me encantaría ver los resultados de una ejecución de IE.


Mis circuitos de benchmarking:

function arrpush_small() {
    var arr1 = [];
    for (a = 0; a < 100; a++)
    {
        arr1 = [];
        for (i = 0; i < 5000; i++)
        {
            arr1.push('elem' + i);
        }
    }
}

function arrlen_small() {
    var arr2 = [];
    for (b = 0; b < 100; b++)
    {
        arr2 = [];
        for (j = 0; j < 5000; j++)
        {
            arr2[arr2.length] = 'elem' + j;
        }
    }
}


function arrpush_large() {
    var arr1 = [];
    for (i = 0; i < 500000; i++)
    {
        arr1.push('elem' + i);
    }
}

function arrlen_large() {
    var arr2 = [];
    for (j = 0; j < 500000; j++)
    {
        arr2[arr2.length] = 'elem' + j;
    }
}

369



Creo que vale la pena mencionar que se puede invocar push con múltiples argumentos, que se agregarán a la matriz en orden. Por ejemplo:

var arr = ['first'];
arr.push('second', 'third');
console.log(arr); // ['first', 'second', 'third']

Como resultado de esto, puede usar push.apply para agregar una matriz a otra matriz como esta:

arr.push.apply(arr, ['forth', 'fifth']);
console.log(arr); // ['first', 'second', 'third', 'forth', 'fifth']

ES5 anotado tiene más información sobre exactamente qué empujar y aplicar hacer.

Actualización 2016: con untado, no necesitas eso apply más, como:

arr.push(...['fourth', 'fifth']);
console.log(arr) // ['first', 'second', 'third', 'fourth', 'fifth']

259



Puedes usar push y apply función para agregar dos matrices.

var array1 = [11, 32, 75];
var array2 = [99, 67, 34];

Array.prototype.push.apply(array1, array2);

Se adjuntará array2 a array1. Ahora array1 contiene [11, 32, 75, 99, 67, 34]. Este código es mucho más simple que escribir for bucles para copiar todos y cada uno de los elementos de la matriz.


64



Utilizar concat:

a = [1, 2, 3];
b = [3, 4, 5];
a = a.concat(b);

a ahora contiene todos los elementos, [1, 2, 3, 3, 4, 5].

Referencia: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/concat


35



Si arr es una matriz, y val es el valor que desea agregar uso:

arr.push(val);

P.ej.

arr = ['a', 'b', 'c'];
arr.push('d');
console.log(arr);

se registrará

['a', 'b', 'c', 'd']

34



Con el nuevo ES6 operador de propagación, uniendo dos matrices utilizando push se vuelve aún más fácil:

var arr = [1, 2, 3, 4, 5];
var arr2 = [6, 7, 8, 9, 10];
arr.push(...arr2);
console.log(arr); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

Esto agrega el contenido de arr2 al final de arr.

Ejemplo de Babel REPL


33



Si quieres agregar dos matrices,

var a = ['a', 'b'];
var b = ['c', 'd'];

entonces podrías usar:

var c = a.concat(b);

Y si quieres agregar registro g para formarvar a=[]) entonces podrías usar:

a.push('g');

27