0

我正在编写一个简单的 javascript 代码来解析和验证用 Forsyth–Edwards Notation (FEN) 编写的国际象棋位置。

此符号中的默认国际象棋位置由下式给出,

const defaultFEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";

有 6 个组件,我使用 String.split(" ") 按空格分割组件,现在我想进一步将结果数组的第一个元素用 "/" 分割,这将给出每个等级的状态。

运行这段代码给了我一个不直观的结果......

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);
}

我预计输出是 8 个字符串,由“/”分隔,位于 defaultFEN 字符串的第一部分。相反,我得到了数字 0-7 打印出来。

有趣的是,如果我手动访问这个数组,console.log(locations.split("/")[i])对于区间 [0-7] 中的任何数字 i,我都会看到我想要的结果。

为什么在使用迭代循环时会打印出数字 0-7,但如果我使用基于普通索引的 for 循环,它会完全按预期工作?

4

1 回答 1

2

您的拆分没有任何问题,但您应该使用for..of( MDN ) 代替:

for (let rank of locations.split("/")) {
   console.log(rank);
}

...作为for..in循环迭代索引(对于 8 元素数组,索引为 0..7)。

作为旁注,在此迭代中使用const(而不是let)(通常)是一个好主意,因为每次循环都会为变量分配一个值(并且通常不应该重新分配):

for (const rank of locations.split("/")) {
   console.log(rank);
}
于 2022-01-30T09:52:27.667 回答