Empujar múltiples elementos a la matriz
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 apply
es algo así como *
.
>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]
Puede insertar varios elementos en una matriz de la siguiente manera
var a = [];
a.push(1, 2, 3);
console.log(a);
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);
Consulte la tabla de compatibilidad ES6 de Kangax para ver qué navegadores son compatibles
Cuando se utilizan la mayoría de funciones de objetos con apply
o call
, el context
pará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])
)
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.
Si desea una alternativa a Array.concat
ECMAScript 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);
Tenga en cuenta que esto es diferente al push
método, ya que el push
mé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.