递归在这里应该可以正常工作:在最基本的情况下,您可以使用id2. 但是,假设getAdjacentCells可能会返回您已经访问过的单元格,除非您能够跟踪已访问过的 ID 并将其传入,否则您最终将无限递归。function setCellState(id, visited) { if(id === null) { return; } if(visited === undefined) { visited = new Set(); } if(visited.has(id)) { return; } visited.add(id); board[getBoardPosition(id)].opened = true; // getAdjacentCells() will return either an array of objects similar to the one the function takes as an argument or an integer let adjacentCells = getAdjacentCells(id); // if getAdjacentCells(id) returns a number, add a div to the HTML element with that id if (typeof (adjacentCells) === "number") { // Removes all other divs, this prevents repetition $("#" + id).empty() // Appends an empty div .append("<div></div>"); } else if (typeof (adjacentCells) === "object") { Object.values(adjacentCells).forEach(id2 => setCellState(id2, visited)); }我冒昧地更改了方法名称,以便更能代表该方法的实际作用。我还更改了它以从单个单元格的 ID 开始,因为这简化了递归并允许围绕 的行为进行注释getAdjacentCells以提供更好的上下文。
添加回答
举报
0/150
提交
取消