Tengo la necesidad de añadir o anteponer elementos al principio de un array.
Por ejemplo, si mi matriz se ve como abajo:
[23, 45, 12, 67]
Y la respuesta de mi llamada AJAX es 34
, quiero que el array actualizado sea como el siguiente:
[34, 23, 45, 12, 67]
Actualmente estoy planeando hacerlo así:
var newArray = [];
newArray.push(response);
for (var i = 0; i < theArray.length; i++) {
newArray.push(theArray[i]);
}
theArray = newArray;
delete newArray;
¿Hay alguna forma mejor de hacer esto? ¿Tiene Javascript alguna funcionalidad incorporada que haga esto?
La complejidad de mi método es O(n)
y sería muy interesante ver implementaciones mejores.
Usa unshift
. Es como push
, excepto que añade elementos al principio del array en vez de al final.
unshift
/push
- añade un elemento al principio/final de una matrizshift
/pop
- elimina y devuelve el primer/último elemento de una matrizUn diagrama sencillo...
unshift -> array <- push
shift <- array -> pop
y gráfico:
add remove start end
push X X
pop X X
unshift X X
shift X X
Consulta la documentación de MDN Array. Prácticamente todos los lenguajes que tienen la capacidad de empujar/retirar elementos de un array también tendrán la capacidad de desalojar/desplazar (a veces llamado push_front
/pop_front
) elementos, nunca deberías tener que implementar esto tú mismo.
Como se señala en los comentarios, si quieres evitar mutar tu array original, puedes utilizar concat
, que concatena dos o más arrays juntos. Puedes usar esto para empujar funcionalmente un solo elemento en la parte delantera o trasera de un array existente; para hacerlo, necesitas convertir el nuevo elemento en un array de un solo elemento:
``javascript const array = [ 3, 2, 1 ]
const nuevoPrimerElemento = 4
const newArray = [newFirstElement].concat(array) // [ 4, 3, 2, 1 ]
`concat` también puede añadir elementos. Los argumentos de `concat` pueden ser de cualquier tipo; se envuelven implícitamente en un array de un solo elemento, si no son ya un array:
``javascript
const array = [ 3, 2, 1 ]
const newLastElement = 0
// Ambas líneas son equivalentes:
const newArray1 = array.concat(newLastElement) // [ 3, 2, 1, 0 ]
const newArray2 = array.concat([newLastElement]) // [ 3, 2, 1, 0 ]
Hoja de trucos rápida:
Los términos shift/unshift y push/pop pueden ser un poco confusos, al menos para la gente que no está familiarizada con la programación en C.
Si no estás familiarizado con la jerga, aquí hay una traducción rápida de términos alternativos, que pueden ser más fáciles de recordar:
* array_unshift() - (aka Prepend ;; InsertBefore ;; InsertAtBegin )
* array_shift() - (aka UnPrepend ;; RemoveBefore ;; RemoveFromBegin )
* array_push() - (aka Append ;; InsertAfter ;; InsertAtEnd )
* array_pop() - (aka UnAppend ;; RemoveAfter ;; RemoveFromEnd )