You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现二维数组相邻雷数统计(扫雷开发场景)

扫雷雷数计算的简易实现方案

你最初想到的遍历8个周边坐标的思路完全正确,边缘位置缺少相邻坐标的问题不需要复杂的特殊分支,只要在读取相邻坐标值之前加一层合法性校验,越界的位置直接跳过不参与计数就能解决。

核心处理逻辑

  • 所有格子的计算逻辑完全统一,不需要单独给角落、边侧的格子写差异化判断
  • 合法边界判定规则很简单:如果计算出来的相邻坐标超出了数组的总行数、总列数范围,就说明这个方向不存在相邻格子,直接跳过即可

分步实现

1. 预先整理8个方向的坐标偏移量

把上下左右、四个斜角的坐标差提前列成固定数组,避免手动写多个相邻坐标时漏算方向:

const directionList = [
  [-1, -1], [-1, 0], [-1, 1],
  [0, -1],          [0, 1],
  [1, -1],  [1, 0], [1, 1]
]

2. 逐格遍历做判定

  • 先获取原数组的总行数、每一行的总列数作为合法边界
  • 遍历到每个格子时,先判断本身是不是地雷(值为9),是的话直接把9填入结果,跳过周边计算
  • 对非地雷的空白格,依次遍历所有8个方向,对每个方向算出的相邻坐标做合法性校验

举个实际校验的例子:第一行第一列的坐标是(0,0),算左上方向的相邻坐标时会得到(-1,-1),因为-1小于合法坐标的最小值0,直接判定为越界,跳过这个方向的计数就行,完全不会触发数组越界报错。

3. 完整可运行代码

代码运行后的输出和你给出的目标数组完全一致:

// 初始输入数组
const inputGrid = [ 
  [0, 9, 0, 0],
  [0, 0, 9, 0],
  [0, 9, 0, 9],
  [9, 9, 0, 0],
]

// 8个方向的偏移量
const directionList = [
  [-1, -1], [-1, 0], [-1, 1],
  [0, -1],          [0, 1],
  [1, -1],  [1, 0], [1, 1]
]

function calculateMineCount(grid) {
  const totalRows = grid.length
  if (totalRows === 0) return []
  const totalCols = grid[0].length
  // 初始化和原数组大小一致的结果数组
  const result = Array.from({length: totalRows}, () => new Array(totalCols).fill(0))

  for (let x = 0; x < totalRows; x++) {
    for (let y = 0; y < totalCols; y++) {
      // 本身是地雷直接填值
      if (grid[x][y] === 9) {
        result[x][y] = 9
        continue
      }
      // 遍历周边数雷
      let adjacentMine = 0
      for (const [dx, dy] of directionList) {
        const neighborX = x + dx
        const neighborY = y + dy
        // 判断相邻坐标是否在合法范围内
        const isXValid = neighborX >= 0 && neighborX < totalRows
        const isYValid = neighborY >= 0 && neighborY < totalCols
        // 坐标合法且对应位置是雷,计数+1
        if (isXValid && isYValid && grid[neighborX][neighborY] === 9) {
          adjacentMine++
        }
      }
      result[x][y] = adjacentMine
    }
  }
  return result
}

// 调用即可得到目标输出
const output = calculateMineCount(inputGrid)

新手开发小提示:不要直接修改原输入数组的内容,单独生成结果数组存计算值,避免后续开发时覆盖原雷位数据,出现难以排查的bug。

内容的提问来源于stack exchange,提问作者Jayden Sayed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 21:27:03