Estoy tratando de empujar múltiples elementos como una matriz, pero obtengo un error
> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined
Estoy tratando de hacer cosas similares a las que haría en ruby, estaba pensando que apply
es algo así *
.
>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]
javascript
evfwcqcg
fuente
fuente
Ahora en ECMAScript2015 (también conocido como ES6), puede usar el operador de propagación para agregar varios elementos a la vez:
Consulte la tabla de compatibilidad ES6 de Kangax para ver qué navegadores son compatibles
fuente
Puedes usar
Array.concat
:fuente
Array.prototype.push.apply(arr1, arr2)
es la respuesta correcta, porque al usarloarr1.concat(arr2)
se está creando una nueva matriz.arr1 = arr1.concat(arr2)
no es un gran problema y se ve mucho más limpio. Empujar a una matriz anterior o reemplazar una matriz antigua por una nueva depende de sus necesidades. Si maneja elementos de más de 10 millones, empujar a una matriz anterior funcionará más rápido, si maneja pequeños trozos, difícilmente encontrará diferencias en la velocidad. Ambas opciones son completamente legítimas.prototype.push.apply
solo llamapush
una vez. Y la distinción anterior no es necesaria sobre la velocidad, sino una operación in situ frente a la creación de una nueva matriz. ¿Qué pasaría si tuviera un método que tomara una matriz y supuestamente la modificara en el lugar? Elconcat
método no puede funcionar, incluso con el código de VisionN ya que no modificará la variable para el llamador de la función.a = a.concat(b)
sigue siendo una sintaxis más corta queArray.prototype.push.apply(arr1, arr2)
Si desea una alternativa a
Array.concat
ECMAScript 2015 (también conocido como ES6, ES2015) que, al igual que esta, no modifica la matriz pero devuelve una nueva matriz, puede usar el operador de propagación de la siguiente manera:Tenga en cuenta que esto es diferente al
push
método ya que elpush
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 puede usar Babel o un transpilador similar si no desea esperar el soporte del navegador y quiere usar ES2015 en producción.
fuente
Hay muchas respuestas a recomendar el uso:
Array.prototype.push(a, b)
. Es una buena manera, PERO si tendrá una b realmente grande, tendrá un error de desbordamiento de pila (debido a demasiados argumentos). Ten cuidado aquí.Consulte ¿Cuál es la forma más eficiente de concatenar matrices de N? para más detalles.
fuente
fuente