Empujar múltiples elementos a la matriz

Resuelto evfwcqcg asked hace 11 años • 9 respuestas

Estoy intentando insertar varios elementos como una matriz, pero aparece un error:

> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined

Estoy intentando hacer cosas similares a las que haría en Ruby, estaba pensando que applyes algo así como *.

>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]
evfwcqcg avatar Feb 06 '13 14:02 evfwcqcg
Aceptado

Puede insertar varios elementos en una matriz de la siguiente manera

var a = [];
    
a.push(1, 2, 3);

console.log(a);
Expandir fragmento

amit1310 avatar Feb 06 '2013 07:02 amit1310

Ahora en ECMAScript2015 (también conocido como ES6), puedes usar el operador de extensión para agregar varios elementos a la vez:

var arr = [1];
var newItems = [2, 3];
arr.push(...newItems);
console.log(arr);
Expandir fragmento

Consulte la tabla de compatibilidad ES6 de Kangax para ver qué navegadores son compatibles

canac avatar Feb 03 '2016 02:02 canac

Cuando se utilizan la mayoría de funciones de objetos con applyo call, el contextparámetro DEBE ser el objeto en el que está trabajando.

En este caso, necesitas a.push.apply(a, [1,2])(o más correctamente Array.prototype.push.apply(a, [1,2]))

Niet the Dark Absol avatar Feb 06 '2013 07:02 Niet the Dark Absol

Como alternativa, puedes utilizar Array.concat:

var result = a.concat(b);

Esto crearía y devolvería una nueva matriz en lugar de enviar elementos a la misma matriz. Puede resultar útil si no desea modificar la matriz de origen sino hacer una copia superficial de la misma.

VisioN avatar Feb 06 '2013 07:02 VisioN

Si desea una alternativa a Array.concatECMAScript 2015 (también conocido como ES6, ES2015) que, como esta, no modifica la matriz pero devuelve una nueva matriz, puede usar el operador de extensión de esta manera:

var arr = [1];
var newItems = [2, 3];
var newerItems = [4, 5];
var newArr = [...arr, ...newItems, ...newerItems];
console.log(newArr);
Expandir fragmento

Tenga en cuenta que esto es diferente al pushmétodo, ya que el pushmétodo muta/modifica la matriz.

Si desea ver si ciertas funciones de ES2015 funcionan en su navegador, consulte la tabla de compatibilidad de Kangax .

También puedes usar Babel o un transpilador similar si no quieres esperar a que el navegador sea compatible y quieres usar ES2015 en producción.

John avatar Apr 16 '2017 09:04 John