Pregunta ¿Cómo puedo agregar nuevos elementos de matriz al comienzo de una matriz en JavaScript?


Tengo la necesidad de agregar o anteponer elementos al comienzo de una matriz.

Por ejemplo, si mi matriz se ve a continuación:

[23, 45, 12, 67]

Y la respuesta de mi llamada AJAX es 34, Quiero que la matriz actualizada sea como la 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? ¿JavaScript tiene alguna funcionalidad incorporada que hace esto?

La complejidad de mi método es O(n) y sería realmente interesante ver mejores implementaciones.


1135
2017-11-10 00:35


origen


Respuestas:


Utilizar unshift. Es como push, excepto que agrega elementos al comienzo de la matriz en lugar de al final.

  • unshift/push - agregar un elemento al principio / final de una matriz
  • shift/pop  - eliminar y devolver el primer / último elemento de y array

Un diagrama simple ...

   unshift -> array <- push
   shift   <- array -> pop

y tabla:

          add  remove  start  end
   push    X                   X
    pop           X            X
unshift    X             X
  shift           X      X

Revisar la Documentación de la matriz MDN. Prácticamente todos los idiomas que tienen la capacidad de empujar / hacer estallar elementos de una matriz también tendrán la capacidad de desviar / cambiar (a veces llamado push_front/pop_front) elementos, nunca deberías tener que implementarlos tú mismo.


2125
2017-11-10 00:37



array operations image

var a = [23, 45, 12, 67];
a.unshift(34);
console.log(a); // [34, 23, 45, 12, 67]


1161
2017-11-10 00:40



Con ES6, use el operador de propagación ... :

MANIFESTACIÓN

var arr = [23, 45, 12, 67];
arr = [34, ...arr]; // RESULT : [34,23, 45, 12, 67]

console.log(arr)


121
2017-09-16 12:26



Otra forma de hacerlo a través de concat

var arr = [1, 2, 3, 4, 5, 6, 7];
console.log([0].concat(arr));

La diferencia entre concat y unshift es eso concat devuelve una nueva matriz. El rendimiento entre ellos se puede encontrar aquí.

function fn_unshift() {
  arr.unshift(0);
  return arr;
}

function fn_concat_init() {
  return [0].concat(arr)
}

Aquí está el resultado de la prueba

enter image description here


48
2018-02-19 10:56



Quick Cheatsheet: 

Los términos shift / unshift y push / pop pueden ser un poco confusos, al menos para las personas que pueden no estar familiarizadas con la programación en C.

Si no está familiarizado con la jerga, aquí hay una traducción rápida de términos alternativos, que puede ser más fácil 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 ) 

38
2018-04-15 17:28



tienes una matriz var arr = [23, 45, 12, 67];

Para agregar un artículo al principio, desea usar splice:

var arr = [23, 45, 12, 67];
arr.splice(0, 0, 34)
console.log(arr);


13
2018-04-20 19:19



var testdata = new Array();
testdata = [23, 45, 12, 67];
testdata = [34, ...testdata]; 
console.log(testdata)
    


1
2018-05-29 06:14