Soy nuevo en JavaScript y es posible que haya hecho una pregunta tonta ... Pero el resultado devuelto por el código a continuación me confundió mucho. No estoy seguro de por qué solo la primera oración muestra el valor de i y estaba en el último número de 3.
También estoy confundido cuando se ejecuta el código document.write('<h1>' + i + msg + '<h1>') , ¿por qué no escribió simplemente el valor agregado de la variable 'msg'? El valor de msg no se eliminó y debería contener tanto el primer como el segundo valor pasados, ¿no es así? Esto me parece un poco confuso ya que llegué con algunos conocimientos de Python y no funcionó de la misma manera.
var scores = [24, 32, 47]; var scores = [24, 32, 47]; var scores = [24, 32, 47]; var arrayLength = scores.length; var roundNumber = 0; var msg = ''; var i; for (i = 0; i < arrayLength; i++) { roundNumber = i + 1; msg += ' Round ' + roundNumber + ': '; msg += scores[i] + '<br>'; } document.write('<h1>' + i + msg + '<h1>')Resultado devuelto por el html:
3 Round 1: 24 Round 2: 32 Round 3: 47Mi resultado esperado:
0 Round 1: 24 1 Round 2: 32 2 Round 3: 47Solo necesita agregar la i al mensaje en el ciclo en lugar de después, como:
var scores = [24, 32, 47]; var arrayLength = scores.length; var roundNumber = 0; var msg = ''; var i; for (i = 0; i < arrayLength; i++) { roundNumber = i + 1; msg += i +' Round ' + roundNumber + ': '; msg += scores[i] + '<br>'; } document.write('<h1>' + msg + '<h1>')Usted emite i solo una vez. Es por eso que solo ve el último valor.
Debe agregarlo a msg dentro del bucle.
var scores = [24, 32, 47]; var scores = [24, 32, 47]; var scores = [24, 32, 47]; var arrayLength = scores.length; var roundNumber = 0; var msg = ''; var i; for (i = 0; i < arrayLength; i++) { roundNumber = i + 1; msg += i + ' Round ' + roundNumber + ': '; msg += scores[i] + '<br>'; } document.write('<h1>' + msg + '<h1>')document.write se ejecuta después del final del bucle.
Muestra todo el contenido agregado de msg . Ese no es el problema.
Lo que va mal es el uso de i : solo lo usa una vez en la salida, después de que finaliza el ciclo. Por lo tanto, lo que ve solo tendrá el valor final que tenía cuando finalizó el ciclo, por lo tanto, muestra 3 y lo hace solo una vez.
A diferencia de msg , que está agregando cada vez que se ejecuta el ciclo (porque += agrega contenido nuevo a la variable existente), el valor de i se sobrescribe con un nuevo valor cada vez que se ejecuta el ciclo (eso es lo que hace i++ en la sintaxis for ).
Para que haga lo que desea, simplemente necesita incorporar el valor i en msg a medida que avanza.
var scores = [24, 32, 47]; var msg = ''; for (let i = 0; i < scores.length; i++) { msg += i + ' Round ' + (i+1) + ': ' + scores[i] + '<br>'; } document.write('<h1>' + msg + '<h1>') PD: también simplifiqué un poco el código: no está claro por qué declaró la misma matriz de scores 3 veces con el mismo valor, y arrayLength y roundNumber no necesitan existir como variables separadas, y ciertamente no como variables que tienen alcance fuera del ciclo. i necesito un alcance fuera del bucle.