Tengo un array JavaScript dataArray
que quiero empujar a un nuevo array newArray
. Pero no quiero que newArray[0]
sea dataArray
. Quiero introducir todos los elementos en el nuevo array:
var newArray = [];
newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...
o incluso mejor:
var newArray = new Array (
dataArray1.values(),
dataArray2.values(),
// ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself
);
Así que ahora la nueva matriz contiene todos los valores de las matrices de datos individuales. ¿Existe alguna abreviatura como pushValues
disponible para no tener que iterar sobre cada dataArray
individual, añadiendo los elementos uno por uno?
Utilice la función concat, así:
var arrayA = [1, 2];
var arrayB = [3, 4];
var newArray = arrayA.concat(arrayB);
El valor de newArray
será [1, 2, 3, 4]
(arrayA
y arrayB
permanecen sin cambios; concat
crea y devuelve un nuevo array para el resultado).
Siempre que los arrays no sean enormes (véase la advertencia más abajo), puede utilizar el método push()
del array al que desea añadir valores. El método push()
puede tomar múltiples parámetros, por lo que puede utilizar su método apply()
para pasar el array de valores a ser empujado como una lista de parámetros de la función. Esto tiene la ventaja sobre el uso de concat()
de añadir elementos al array en lugar de crear un nuevo array.
Sin embargo, parece que para matrices grandes (del orden de 100.000 miembros o más), este truco puede fallar. Para este tipo de matrices, es mejor utilizar un bucle. Consulte https://stackoverflow.com/a/17368101/96100 para obtener más detalles.
var newArray = [];
newArray.push.apply(newArray, dataArray1);
newArray.push.apply(newArray, dataArray2);
Usted podría querer generalizar esto en una función:
function pushArray(arr, arr2) {
arr.push.apply(arr, arr2);
}
... o añadirlo al prototipo de Array
's:
Array.prototype.pushArray = function(arr) {
this.push.apply(this, arr);
};
var newArray = [];
newArray.pushArray(dataArray1);
newArray.pushArray(dataArray2);
... o emular el método original push()
permitiendo múltiples parámetros utilizando el hecho de que concat()
, como push()
, permite múltiples parámetros:
Array.prototype.pushArray = function() {
this.push.apply(this, this.concat.apply([], arguments));
};
var newArray = [];
newArray.pushArray(dataArray1, dataArray2);
Aquí'hay una versión basada en un bucle del último ejemplo, adecuada para matrices grandes y todos los principales navegadores, incluyendo IE <= 8:
Array.prototype.pushArray = function() {
var toPush = this.concat.apply([], arguments);
for (var i = 0, len = toPush.length; i < len; ++i) {
this.push(toPush[i]);
}
};