Aquí está mi código, por favor dé algunas soluciones.
var b = [167,244,377,56,235,269,23]; for(var temp=0;temp<b.length;temp++){ console.log(b) b.shift(); } [ 167, 244, 377,56, 235, 269,23] [ 244, 377, 56, 235, 269, 23 ] [ 377, 56, 235, 269, 23 ] [ 56, 235, 269, 23 ]Condition en el bucle for se verifica cada vez. Y cada vez b.lenght es cada vez más pequeña. Solo necesita guardar b.length en algún lugar y usar su valor.
var b = [167,244,377,56,235,269,23]; const length = b.length; for(var temp=0;temp<length;temp++){ console.log(b) b.shift(); }Cuando cambia, elimina elementos de la matriz. El tamaño de la matriz se reduce. Está recorriendo la longitud actual de la matriz, no la longitud original de la matriz.
i=0; b.length=7 --> 0 < 7 === true i=1; b.length=6 --> 1 < 6 === true i=2; b.length=5 --> 2 < 5 === true i=3; b.length=4 --> 3 < 4 === true i=4; b.length=3 --> 4 < 3 === falseEntonces, o almacena la longitud original, hace un bucle desde la longitud hasta cero, o usa un bucle while.
var b = [...] var length = b.length; for(var temp=0; temp<b.length; temp++){ //code }o
var b = [...] for(var temp=b.length; temp>=0; temp--){ //code }o
while(b.length) { //code }Ordeno continuar con el bucle hasta que b no tenga elementos, elimine la expresión final temp++ .
var b = [167, 244, 377, 56, 235, 269, 23]; for (var temp = 0; temp < b.length;) { console.log(b); b.shift(); } En su lugar, podría mover la llamada al método shift a la expresión final
var b = [167, 244, 377, 56, 235, 269, 23]; for (var temp = 0; temp < b.length; b.shift()) { console.log(b); } Dado que estamos eliminando elementos de la matriz en el ciclo for , no debemos incrementar la temp en absoluto. Con eso en mente, también podemos convertir el ciclo en un ciclo while .
var b = [167, 244, 377, 56, 235, 269, 23]; while (b.length > 0) { console.log(b); b.shift(); }