Sé cómo funciona la función de mapa y cómo debo usar la función de mapa. Pero mientras jugaba con el código de mono, no podía entender cómo funciona la función shift aquí.

var a = [0,1,2,3,4,5,6];
console.log(a);
a.map(function(){
  a.shift();
});
console.log(a); // [4,5,6]

Estoy totalmente confundido sobre cómo a es ahora [4,5,6]?

3
Anil Yogi 27 oct. 2017 a las 13:22

3 respuestas

La mejor respuesta

El resultado es [4,5,6], es solo porque el tamaño de la matriz se reduce y la función de mapa no se ejecuta 7 veces en este caso. Déjame explicarte con un diagrama ascii:

map contains        expected run times      after shifted       actual run times
--------------------------------------------------------------------------------------
[0,1,2,3,4,5,6]     7                       [1,2,3,4,5,6]       1
[1,2,3,4,5,6]       6                       [2,3,4,5,6]         2
[2,3,4,5,6]         5                       [3,4,5,6]           3
[3,4,5,6]           4                       [4,5,6]             4

Ahora, los tiempos de ejecución esperados de la función de mapa son los tiempos de ejecución reales. Por lo tanto, no es necesario ejecutar la función de mapa nuevamente.

Espero que esto aclare las cosas detrás de escena.

5
Bhojendra Rauniyar 27 oct. 2017 a las 10:36

Estoy totalmente confundida ¿cómo es ahora [4,5,6]?

Está iterando una matriz mientras le quita elementos. Eventualmente, se quedará sin elementos para eliminar, ya no habrá más iteraciones.

Simplemente ponga una declaración console en el código

var a = [0,1,2,3,4,5,6];
a.map(function(v, i){
  console.log(a)
  console.log( a.shift() );
});
console.log(a); // [4,5,6]

Puede observar que pasa por 4 iteraciones de eliminación de un elemento desde el frente.

(7) [0, 1, 2, 3, 4, 5, 6] // primera iteración sin ningún cambio

0 // primer elemento eliminado

(6) [1, 2, 3, 4, 5, 6] // resultado después de la primera iteración

1

(5) [2, 3, 4, 5, 6]

2

(4) [3, 4, 5, 6]

3

(3) [4, 5, 6] // matriz resultante después del 4to turno (dado que ahora no son posibles más iteraciones ya que el número de elementos en la matriz es menor que 4

3
gurvinder372 27 oct. 2017 a las 10:35

Bueno, la longitud de la matriz es .shift () para cada iteración de .map (), por lo que está acortando su matriz durante el mapeo, por lo que un [0] se convierte en 1 para la primera iteración mientras que la longitud total de la matriz se convierte en 6.

Luego cambia () en el índice [1] que ahora es 2, luego el índice [2] que ahora es 4, luego el índice [3] que ahora es 6, de modo que 6 se coloca en el índice [2].

Entonces el resto de la matriz está vacía y a es [4,5,6] :)

-1
Paul Thomas Clarke 27 oct. 2017 a las 10:39