当前位置: 首页 > 知识库问答 >
问题:

迭代String.split()的工作方式与我预期的不同[重复]

张坚白
2023-03-14

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

此符号中的默认国际象棋位置由,

const defaultFEN=“rnbqkbnr/pppppppp/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循环,它会完全按照预期工作?

共有1个答案

鲁建茗
2023-03-14

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

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

…asfor..in循环在索引上迭代(对于8元素数组,这些索引是0..7)。

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

for (const rank of locations.split("/")) {
   console.log(rank);
}
 类似资料:
  • 我想使用查找从一个集合中获取一些数据并将其放入另一个集合中。 在localfield或foreignfield中写什么都不重要,因为它从player_game_stats中获取所有数据并将其插入player集合中的每个文档中。我想检查localfield和foreignField是否相等,但lookup不检查这一点。我对mongodb使用NoSqlBooster

  • 问题内容: 当使用带点名的名称时,例如:,返回的模块不是,返回的内容几乎都是空的!这里发生了什么? 问题答案: 从python文档上: … 当name变量的形式为package.module时,通常返回顶级包(名称直到第一个点),而不是按名称命名的模块。但是,当给出非空的fromlist参数时,将返回按名称命名的模块。这样做是为了与为不同种类的import语句生成的字节码兼容。使用“ import

  • 问题内容: 我有一个终结点实现,即将一个对象传递给参数列表。我正在尝试使用@NotNull批注来验证该对象是否为null。 如果该对象被验证为非null,则端点将仅返回200 OK响应。但是,当我使用指定的路径向该终结点发出请求时,体内没有任何内容时,不会引发任何错误。相反,我能够检索200响应(即使我在返回响应之前检查对象是否为null,也表明是这种情况)。 有人可以指导我如何以正确的方式验证对

  • 我正在解决反向字符串问题。我想知道为什么交换2 char的帮助函数在我的代码中不起作用。但如果我在while循环中编写交换代码,它就可以工作。

  • 我目前正试图研究并发性,特别是“volatile”关键字。 通过声明计数器变量为volatile,所有对计数器变量的写入都将立即写回主存。此外,计数器变量的所有读取都将直接从主存中读取。下面是计数器变量的volatile声明的外观 和 当线程写入易失性变量时,不仅易失性变量本身会被写入主内存。此外,线程在写入易失性变量之前更改的所有其他变量也会刷新到主内存中。当一个线程读取一个易失性变量时,它还将

  • 问题内容: 我已经为此奋斗了2天,尽我所能用Google搜索和stackoverflow,但是我无法解决。 我正在构建一个简单的节点应用程序(+ Express + Mongoose),其登录页面重定向到主页。这是我的服务器JS代码: 登录页面向发出POST请求,在此验证发布的数据。这可行。我可以在Node控制台中看到“我们在这里:’/ credentials’”。 然后是问题:res.redir