Estoy escribiendo un código javascript simple para analizar y verificar una posición de ajedrez escrita en notación Forsyth-Edwards (FEN).
La posición de ajedrez por defecto en esta notación viene dada por,
const defaultFEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
Hay 6 componentes, dividí los componentes por espacios en blanco usando String.split (" "), ahora quiero dividir aún más el primer elemento de la matriz resultante por "/", lo que dará el estado de cada rango.
Ejecutar este código me da un resultado poco intuitivo...
const defaultFEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; const locations = defaultFEN.split(" ")[0]; for (let rank in locations.split("/")) { console.log(rank); }Esperaba que la salida fuera de 8 cadenas, delimitadas por "/", en la primera parte de la cadena FEN predeterminada. En cambio, obtengo los números 0-7 impresos.
Curiosamente, si accedo manualmente a esta matriz, console.log(locations.split("/")[i]) , para cualquier número i en el intervalo [0-7], veo el resultado que pretendía.
¿Por qué se imprimen los números 0-7 cuando se usa el bucle iterativo, pero funciona exactamente como se esperaba si uso un bucle for basado en un índice normal?
No hay nada malo con su división, pero debería usar for..of ( MDN ) en su lugar:
for (let rank of locations.split("/")) { console.log(rank); } ... como for..in loop itera sobre los índices (y esos son 0..7 para una matriz de 8 elementos).
Como nota al margen, (generalmente) es una buena idea usar const (y no let ) en esta iteración, ya que a la variable se le asigna un valor una vez en cada ciclo (y generalmente no debe reasignarse):
for (const rank of locations.split("/")) { console.log(rank); }