Su código funciona como se esperaba.
El método Array.pop() elimina el último elemento de una matriz y devuelve ese elemento. Este método cambia la matriz desde la que se ha llamado.
Array.pop() devuelve el elemento eliminado de la matriz.
Cuando el índice de iteración es 0, iterará a través de la matriz [1, 2, 3, 4] , elimina 4 en la primera iteración, lo que hace que la longitud de la matriz sea 3.
Cuando el índice de iteración es 1, la iteración se realizará en Array [1, 2, 3] y elimina 3 de esta matriz.
Ahora la longitud de Array es 2 y la iteración ya se ha completado dos veces y el bucle sale.
Es por eso que su ciclo se ejecuta solo dos veces.
const arr = [1, 2, 3, 4]; arr.forEach((val, index, io) => { console.log(`Iterating ${index + 1}`); console.log(val, index, io.pop()); console.log(`Array After Iteration ${io}`); }); console.log(`Final Array ${arr}`);var arr = [1, 2, 3, 4]; arr.forEach((val, index, io) => console.log(val, index, io.pop()))Tu código está haciendo lo que debería
val | index | io.pop() | Modified Array 1 0 4 [1, 2, 3] 2 1 3 [1, 2] // since it already reached at 2 no other element needs to be traversed and hence iteration stops.Cada vez que está iniciando sesión, está eliminando el último elemento de la matriz y también avanzando.
La devolución de llamada se ejecuta solo para los elementos que están presentes en la matriz y, por lo tanto, como sus elementos se eliminan con cada registro, permanece con dos elementos y, por lo tanto, se ejecuta solo dos veces.
Espero que esto ayude. !✌