Chess.js 如何访问.moves({ verbose: true})中的各个字段

问题描述 投票:0回答:1

我是一名经验丰富的 Delphi 程序员,但对 JavaScript/TypeScript 完全陌生,我不理解 chess.js 函数 .moves({ verbose: true}) 返回的结构以及要检索的适当 JS/TS 语法来自可能的移动列表字段的数据。例如,以下简单代码列出了从 FEN 字符串给出的位置开始的 50 种可能的移动方式。

import { Chess } from "chess.js"
const analysisBoard = new Chess("r1bq1rk1/ppppbppp/4p3/4P3/5Q2/2NB1NP1/PP1P3P/R1B1K2R w KQ - 1 11")
console.log(analysisBoard.moves({ verbose: true}))

在列表中移动 26 既是捕获也是检查 [san: "Bxh7+"]

26: (10) {color: "w", piece: "b", from: "d3",...}
color: "w"
piece: "b"
from: "d3"
to: "h7"
san: "Bxh7+"
flags: "c"
lan: "d3h7"
before: "r1bq1rk1/ppppbppp/4p3/4P3/5Q2/2NB1NP1/PP1P3P/R1B1K2R w KQ - 1 11"
after: "r1bq1rk1/ppppbppB/4p3/4P3/5Q2/2N2NP1/PP1P3P/R1B1K2R b KQ - 0 11"
captured: "p"

熟悉该结构和适当的 JS/TS 语法的人请告诉我如何循环遍历可用的合法动作(我了解如何使用“for”循环,查找任何检查(即包含字符“+”)和/或是捕获(它们包含字符“x”,或标志:包含“c”,或存在“捕获:”字段),然后能够访问来自这些检查和/或捕获的某些字段的数据,例如“piece:”,“from:”,“san:”和“after:”?我了解如何使用字符串并提取我需要的东西当我在字符串变量中有适当的字符串时,但我坚持从 .moves 结构中查找和提取字符串。也许该结构是一个保存键:值对的对象,我需要使用 .map,但如果是这样我不确定在这种情况下如何使用它。

我认为该结构可能只是一个字符串列表/数组。然而,像 let moveStr=analysisBoard.moves[26] 这样的语法对我没有任何帮助。当我尝试 console.log(moveStr) 时,它是未定义的。

chess
1个回答
0
投票

我猜测该结构是一个对象列表/数组。这个网站:https://www.freecodecamp.org/news/javascript-array-of-objects-tutorial-how-to-create-update-and-loop-through-objects-using-js-array-methods/ 给了我一些有效的示例代码,例如,

import { Chess } from "chess.js"
const analysisBoard = new 
Chess("r1bq1rk1/ppppbppp/4p3/4P3/5Q2/2NB1NP1/PP1P3P/R1B1K2R w KQ - 1 11")
let possibleMoves = analysisBoard.moves({ verbose: true})
let movesThatAreChecks = possibleMoves.filter(possibleMoves => possibleMoves.san.includes("+"))
console.log(possibleMoves)
console.log(analysisBoard.ascii())
console.log(movesThatAreChecks)
console.log(movesThatAreChecks[0].after)
console.log(movesThatAreChecks[1].after)
let movesThatAreCaptures = possibleMoves.filter(possibleMoves => possibleMoves.san.includes("x"))
console.log(movesThatAreCaptures)

© www.soinside.com 2019 - 2024. All rights reserved.